1樓:匿名使用者
這一型別在c#中叫做 「可空型別」;int?是一種型別,普通的int不能為null,而用int?,其值可以為null
int?或者nullable 表示基礎型別為值型別的物件,值型別與引用型別一樣也可以分配 nullnothingnullptrnull 引用
對於乙個型別,如果既可以給它分配乙個值,也可以給它分配 nullnothingnullptrnull 引用,我們就說這個型別是可空的。因此,可空型別可表示乙個值,或表示不存在任何值。例如,類似 string 的引用型別就是可空型別,而類似 int32 的值型別不是可空型別。
由於值型別的容量只夠表示適合於該型別的值,因此它不可為空;值型別沒有表示空值所需的額外容量。
我的總結就是:
可空型別的基礎型別可以是任何非可空值型別或任何具有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?的拆箱轉換。
但是任何情況下可空型別都不滿足介面約束,即使基礎型別實現了該特定介面。
具體例項可參考
2樓:
int 和datetime 是不能為null,string可以所以後面加個?表示一種可支援null的型別int ?a =null 可以
int a=null 不可以
3樓:匿名使用者
int datetime都是值型別,不能為null
加了?以後就可以為null了
4樓:
在c#中 int ? 帶表的是可空型別
c#變數後面加問號是什麼意思?看清楚是變數後面
5樓:魔法軟糖
軟糖來回答把。
c#6.0中表示該變數為null時,不執行該語句。
這種用法只有在.***4.6以上才能用!!!(對應vs2015)
6樓:
當val=null時
val?.tolower();返回值=null
沒有「?」時,顯然要報錯的。
7樓:索醉波索發
int本來是乙個值型別,不可以賦予空值
但這樣乙個問號,就是使得num成為乙個可空型別,你後面這樣寫也是可以的了:
num=
null
這樣的作用就是有些時候當某些int值無意義,你又不想用0等特殊值來表示。
c#中型別後跟「?」再跟變數是什麼意思?
8樓:高金山
是 可空
型別!比如 int? a;
那麼 可以這樣賦值:a=null;
可空型別是 system.nullable 結構的例項。可空型別可以表示其基礎值型別正常範圍內的值,再加上乙個 null 值。
例如,nullable,讀作「可空的 int32」,可以被賦值為 -2147483648 到 2147483647 之間的任意值,也可以被賦值為 null 值。nullable可以被賦值為 true 或 false,或 null。在處理資料庫和其他包含可能未賦值的元素的資料型別時,將 null 賦值給數值型別或布林型的功能特別有用。
例如,資料庫中的布林型字段可以儲存值 true 或 false,或者,該字段也可以未定義。
可空型別概述
可空型別具有以下特性:
可空型別表示可被賦值為 null 值的值型別變數。無法建立基於引用型別的可空型別。(引用型別已支援 null 值。)。
語法 t? 是 system.nullable的簡寫,此處的 t 為值型別。這兩種形式可以互換。
為可空型別賦值與為一般值型別賦值的方法相同,如 int? x = 10; 或 double? d = 4.108;。
如果基礎型別的值為 null,請使用 system.nullable.getvalueordefault 屬性返回該基礎型別所賦的值或預設值,例如 int j = x.
getvalueordefault();
請使用 hasvalue 和 value 唯讀屬性測試是否為空和檢索值,例如 if(x.hasvalue) j = x.value;
如果此變數包含值,則 hasvalue 屬性返回 true;或者,如果此變數的值為空,則返回 false。
如果已賦值,則 value 屬性返回該值,否則將引發 system.invalidoperationexception。
可空型別變數的預設值將 hasvalue 設定為 false。未定義 value。
使用 ?? 運算子分配預設值,當前值為空的可空型別被賦值給非空型別時將應用該預設值,如 int? x = null; int y = x ?? -1;。
不允許使用巢狀的可空型別。將不編譯下面一行:nullable> n;
9樓:匿名使用者
是可空型別
詳細的樓上說的很好,,暈,,來晚了
c#裡變數後面加中括號什麼意思
10樓:匿名使用者
你的提問我從如下兩方
面來回答:
第一、session["username"]=null;
session屬於內建物件的乙個,它可以用來儲存資料(例如:登入資訊),且安全性較好。而它後面的用來獲取特定物件,就如同陣列的索引一樣,只是它的儲存方式是以鍵-值對的方式。
所以也就是所謂的鍵;
第二、typesdr["typename"].tostring();
這個就很難說了,關鍵在於這個typesdr物件是什麼了。如果是datatable的話,就獲得指定行;如果是集合,則是獲取鍵為typename的物件的值……
還有你的提問中session["username"]==null本身就是乙個錯誤應該是
session["username"]=null;
11樓:匿名使用者
session["username"] == null中的username是你在第一次時寫的,如果你第一次賦值時寫的是session["user"] ="hello",那你在後面就可以用session["user"] ==null了
C中類後加函式是什麼意思,C中類後加乙個函式是什麼意思
x f5 是定義乙個返回型別為x的函式 如果你感覺不好理解的話把x換成int去考慮 就是f5這個函式返回了乙個x類型別的變數 c 類的成員函式前加 什麼意思 這個和函式引數加位址符的作用是一樣的,用於返值返回的是引用而不是賦值。也就是說,該函式返值會通過位址傳送的方式給到函式呼叫者要求的返回值,這樣...
C中什麼意思C中是什麼意思
在賦值符 之前加上其它二目運算子可構成復合賦值符。如 構成復合賦值表示式的一般形式為 變數 雙目運算子 表示式 它等效於 變數 變數 運算子 表示式 例如 a 5 等價於a a 5x y 7 等價於x x y 7 r p 等價於r r p 復合賦值符這種寫法,對初學者可能不習慣,但十分有利於編譯處理...
c中10010是什麼意思,c中copychars是什麼意思
100的結果是除以100的餘數 10的結果是除以10的結果的整數部分 是求餘數 是除 這兩個運算是不一樣的,的優先順序稍微高於 但是屬於同一等級二目運算,運算規則是從左到右的 運算是整除取餘運算 比如1132整除100應該是得11餘數32132整除100則是得1,餘數也是32 千位上的1要算,但關鍵...