C變數定義中含問號代表什麼,c 變數後面加問號是什麼意思?看清楚是變數後面

2021-03-20 17:08:17 字數 5607 閱讀 1087

1樓:匿名使用者

int本來是一個值型別,不可以賦予空值

但這樣一個問號,就是使得num成為一個可空型別,你後面這樣寫也是可以的了:

num = null

這樣的作用就是有些時候當某些int值無意義,你又不想用0等特殊值來表示。

2樓:一個人『等待

c#變數定義中含問號代表該變數允許為空(null)。

可以為 null 的型別可以表示基礎型別的所有值,另外還可以表示 null 值。 可以為 null 的型別可通過下面兩種方式中的一種宣告:

system.nullablevariable

- 或 -

t? variable

t 是可以為 null 的型別的基礎型別。 t 可以是包括 struct 在內的任何值型別;但不能是引用型別。

-------------------------------------------

可以檢視msdn幫助:「可以為 null 的型別(c# 程式設計指南)」和「使用可以為 null 的型別(c# 程式設計指南)」。

3樓:匿名使用者

1. 可空型別修飾符

例如 int?, datetime?之類的 申明時加?表示值型別也可為空

2. 三元表示式:

例如:x?y:z 表示如果表示式x為true,則返回y;如果x為false,則返回z,有時用來替代簡化if{}else{} 的

4樓:

可空型別修飾符「t?」:可空型別的基礎型別可以是任何非可空值型別或任何具有struct約束的型別引數,但不能是可空型別或引用型別。

例如:int?代表是可空的整形,而int??

則是無效型別。即可空型別可以表示其基礎型別的所有值和一個額外的空值。語法 t?

是system.nullable的縮寫形式。可空型別具有一個hasvalue的bool型別只讀屬性,當可空型別例項的該屬性為true時,則表示該例項是非空例項,包含一個已知值value;hasvalue為false時,訪問value屬性將導致 system.

invalidoperationexception。可空型別t?具有一個型別為t的單個引數的公共建構函式,如new int?

(123)將獲得一個值為123的int?型別例項。從t?

到由t實現的任何介面都存在裝箱轉換,並且從由t實現的任何介面都存在到t?的拆箱轉換。但是任何情況下可空型別都不滿足介面約束,即使基礎型別實現了該特定介面。

5樓:匿名使用者

是可空型別的變數。不過引用型別的變數是無法以這種形式命名變數的。如string?

str = new string();語法是錯誤的。一般情況可空型別在想資料庫中傳參很有用的。因為資料庫中的欄位可能使設定為空型別的。

那麼這時c#中的可空型別(?)有大顯其用了!

6樓:匿名使用者

可為空值,即null

c#變數後面加問號是什麼意思?看清楚是變數後面

7樓:魔法軟糖

軟糖來回答把。

c#6.0中表示該變數為null時,不執行該語句。

這種用法只有在.***4.6以上才能用!!!(對應vs2015)

8樓:

當val=null時

val?.tolower();返回值=null

沒有「?」時,顯然要報錯的。

9樓:索醉波索發

int本來是一個值型別,不可以賦予空值

但這樣一個問號,就是使得num成為一個可空型別,你後面這樣寫也是可以的了:

num=

null

這樣的作用就是有些時候當某些int值無意義,你又不想用0等特殊值來表示。

c#定義的時候資料型別後加個問號是什麼意思?

10樓:陽光的雷咩咩

可空型別

c#**中的問號是什麼意思

11樓:匿名使用者

引用型別可以使用空引用表示一個不存在的值,而值型別通常不能表示為空。

例如:string str=null;//是正確的。

int i=null;//編譯器將報錯。

為了使值型別也可為空,可空型別出現了,可空型別使用可空型別修飾符?來表示,表現形式為t?。

例:int?表示是可空的整形,datetime?表示為可空的時間。

int? i=null;//表示可空

t?其實是system.nullable(泛型結構)的縮寫形式,也就意味著當你用到t?時編譯器在編譯時會把t?編譯成system.nullable的形式,

例如:int?,編譯後便是system.nullable的形式。

語法為:條件表示式?表示式1:表示式2;

該操作首先求出條件表示式的值(bool型別),為true時呼叫表示式1,為flase時呼叫表示式2。

其邏輯為:"如果為真執行第一個,否則執行第二個。"

例:test ? expression1 : expression2

test 任何 boolean 表示式。

expression1 test 為 true 時返回的表示式。可能是逗點表示式。

expression2 test 為 false 時返回的表示式。可能是逗點表示式。

例如:string prm1="4";

string prm2="5";

string prm3 = prm1==prm2?"yes":"no" // 此時prm3值為"no".

空合併運算子 (null coalescing operator) ??

用於定義可空型別和引用型別的預設值。如果此運算子的左運算元不為 null,則此運算子將返回左運算元;否則返回右運算元。

例:a??b 如果 a 為非空,則 a ?? b 的結果為 a;否則結果為 b 。

listlist=null;

listlist1=list??new list();//如果list為null,list1就會為一個新

//的例項

空合併運算子為右結合運算子,即操作時從右向左進行組合的。

例:「a??b??c」的形式按「a??(b??c)」計算。

string s = "123456789";

var r1 = s?.last();

s = null;

var r2 = s?.last();

當變數不為null時,正常執行;當變數為null時,返回null。

12樓:丹誠禹賦

c#中兩個問號(「?」)的作用是判斷「?」左邊的物件是否為null,如果不為null則使用「?」左邊的物件,如果為null則使用「?」右邊的物件。

c#實體類中在資料型別後面新增問號是什麼意思?

13樓:匿名使用者

資料型別本身不可空,即不能賦null值,但如果需要賦null值,則需要使用可空型別,datetime不能賦null值,datetime?可以賦null值,預設是null值。int,float等也一樣。

14樓:水中淚

c#語法中一個個問號(?)的運算子是指:可以為 null 的型別。

msdn上面的解釋:

在處理資料庫和其他包含不可賦值的元素的資料型別時,將 null 賦值給數值型別或布林型以及日期型別的功能特別有用。例如,資料庫中的布林型欄位可以儲存值 true 或false,或者,該欄位也可以未定義。

c#語法中兩個問號(??)的運算子是指null 合併運算子,合併運算子為型別轉換定義了一個預設值,以防可空型別的值為null。

msdn上面的解釋:

?? 運算子稱為 null 合併運算子,用於定義可以為 null 值的型別和引用型別的預設值。如果此運算子的左運算元不為 null,則此運算子將返回左運算元(左邊表示式);否則當左運算元為 null,返回右運算元(右邊表示式)。

15樓:

這樣可以給這個變數賦null值。

asp.***(c#) 資料型別後加個問號 是什麼意思?

16樓:匿名使用者

在c#1.1的語法中是沒有int32?這種語法結構的。

這樣也就意味著不能將null(空值)傳遞給int資料型別。在c#2.0中,microsoft為了使c#的語法有更多的靈活性,允許將空值(null)和int32的資料型別一起使用。

只需要使用如下申明即可: int32? customerid 或者 nullablecustomerid.

這樣的話,你就可以隨意進行空值操作(null)比如: int32? customerid customerid = null; 這樣是不是比c#1.

1的語法要方便?

17樓:魔淪殤

表示這個變數可以為空null

18樓:匿名使用者

通常情況下,int 資料為空時會報錯的,而 int? 則表示 該值可以為空。

c#中,為什麼在值型別後面加問號

19樓:驚慌夜

int本來是一個值型別,不可以賦予空值 但這樣一個問號,就是使得num成為一個可空型別,你後面這樣寫也是可以的了: num = null 這樣的作用就是有些時候當某些int值無意義,你又不想用0等特殊值來表示。

20樓:

為什麼不用class而要用struct呢?你以前是搞c的吧? c#的結構體

是值型別的,是直接儲存在棧上面的,而不是像class一樣是用引用型別。 值型別變數包含其例項資料,每個變數儲存了其本身的資料拷貝,所以如果值型別允許你**那樣的話,就會出現死迴圈了。 最後,你的**直接用class代替struct,然後去掉那幾個問號,就可以了。

21樓:匿名使用者

int i=null;報錯

int? i=null;通過

我感覺就這一個區別

c#問號的作用 10

22樓:冰麟輕武

三元表示式 和 if類似

只不過 if可以判斷後執行語句

三元表示式只能判斷後賦值

三元表示式的符號是 ?(問號)和:(冒號)比如if的式子

string s = null;

if(1>1)

else

可以寫成這樣的三元表示式

string s = (1 > 1)? "對":"錯";

如果表示式 1>1 成立 則s = 對 否則 s = 錯在上面的式子中 ()括號是可有可無的,帶上看的清楚一些

23樓:jim小子

你找下 三元運算子 就會明白的。

表示式a ?b : c

意思是:如果表示式a為真,則整個表示式的值為b,否則值為c。

24樓:狐狸——精靈

只是一個判斷的表示式,三元運算子,左是右非

C 在頭函式中定義了全域性變數,在主函式中已經include「xx h」,但是我不能用那個全域性變數為什麼

extern mat point x 這一句只是一個宣告語句,並沒有真正定義 物件 point x。你需要在任意一個 原始檔cpp檔案中回定義這個物件,比答如這樣 mat point x 去掉前面的 extern即是定義了。標頭檔案里加宣告是正確的做法,如你的 而定義一般是 放在原始檔裡的。原始檔才...

C中可以把自定義資料結構變數作為引數傳遞給方法嗎

c 屬於基於clr的託管類編copy程語言,對方法的引數能夠使用引數傳遞和值傳遞兩種傳遞方式。你提出的問題關鍵資訊比較少,我初步推測,你所說的自定義資料結構應該是你自己編寫的一個類,裡面有一些你自定義的屬性資訊,例如 public class a get 你的資料結構定義好以後,就可以建立實體類物件...

c語言中,什麼樣的變數定義是合法的

c項是合法的。在vb6中,變數的命名必須遵循以下規則 1 變數名必須以字母或下劃線打頭,名字中間只能由字母 數字和下劃線 組成 最後一個字元可以是型別說明符 2 變數名的長度不得超過255個字元 3 變數名在有效的範圍內必須是唯一的。4 變數名不能是vb中的保留字 關鍵字 也不能是末尾帶型別說明符的...