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中的保留字 關鍵字 也不能是末尾帶型別說明符的...