int?是一種型別,普通的int不能為null,而用int?,其值可以為null
int?或者nullable 表示基礎型別為值型別的物件,值型別與引用型別一樣也可以分配 nullnothingnullptrnull 引用
對於乙個型別,如果既可以給它分配乙個值,也可以給它分配 nullnothingnullptrnull 引用(在 visual basic 中為 nothing)(表示沒有任何值),我們就說這個型別是可空的。因此,可空型別可表示乙個值,或表示不存在任何值。例如,類似 string 的引用型別就是可空型別,而類似 int32 的值型別不是可空型別。由於值型別的容量只夠表示適合於該型別的值,因此它不可為空;值型別沒有表示空值所需的額外容量。
nullable 結構支援只將乙個值型別用作可空型別,因為引用型別本身就是可空的。
nullable 類為 nullable 結構提供補充支援。nullable 類支援獲取可空型別的基礎型別,以及對基礎值型別不支援一般的比較和相等性操作的可空型別進行成對的比較和相等性操作。
方案 根據不同的應用場合,可使用可空型別來表示存在或不存在的內容。例如,html 標記的某個可選屬性可能存在於某乙個標記中,但不存在於另乙個標記中;或者資料庫表的某個可空列可能存在於表的某一行中,但不存在於另一行中。
可將屬性或列表示為類中的字段,並且可將該字段定義為值型別。該字段可包含屬性或列的所有有效值,但不能提供乙個附加值來表示屬性或列不存在。在這種情況下,應將該字段定義為可空型別,而不是值型別。
基本屬性
nullable 結構的兩個基礎成員為 hasvalue 和 value 屬性。如果 nullable 物件的 hasvalue 屬性為 true,則可以使用 value 屬性訪問該物件的值。如果 hasvalue 屬性為 false,則表示尚未定義該物件的值,並且嘗試訪問 value 屬性時會引發 invalidoperationexception。
裝箱和取消裝箱
在對可空型別進行裝箱時,公共語言執行庫自動將 nullable 物件的基礎值(而不是 nullable 物件本身)裝箱。也就是說,如果 hasvalue 屬性為 true,則將 value 屬性的內容裝箱。在對可空型別的基礎值進行取消裝箱時,公共語言執行庫建立乙個新的初始化為基礎值的 nullable 結構。
如果可空型別的 hasvalue 屬性為 false,則裝箱操作的結果為 nullnothingnullptrnull 引用(在 visual basic 中為 nothing)。因此,如果將已裝箱的可空型別傳遞給需要物件引數的方法,則該方法必須準備處理引數為 nullnothingnullptrnull 引用(在 visual basic 中為 nothing) 的情況。如果對 nullnothingnullptrnull 引用(在 visual basic 中為 nothing) 進行取消裝箱使其成為可空型別,則公共語言執行庫會建立乙個新的 nullable 結構並將其 hasvalue 屬性初始化為 false。
nullable 這個泛型類:
[serializable, structlayout(layoutkind.sequential), typedependency("system.collections.generic.nullablecomparer`1"), typedependency("system.collections.generic.nullableequalitycomparer`1")]
public struct nullable where t: struct
public bool hasvalue }
public t value
return this.value;
} }
public t getvalueordefault()
public t getvalueordefault(t defaultvalue)
return this.value;
} public override bool equals(object other)
if (other == null)
return this.value.equals(other);
} public override int gethashcode()
return this.value.gethashcode();
} public override string tostring()
return this.value.tostring();
} public static implicit operator t?(t value)
public static explicit operator t(t? value) }
C 中可空型別
c 提供了乙個特殊的資料型別,nullable 型別 可空型別 可空型別可以表示其基礎值型別正常範圍內的值,再加上乙個 null 值。例如,nullable int32 讀作 可空的 int32 可以被賦值為 2,147,483,648 到 2,147,483,647 之間的任意值,也可以被賦值為 ...
c 的可空型別
t variablet 可空型別的基本型別,variable 表示可空型別的變數,表示可空型別 如果未賦初值,則判定為null 可空型別包含hasvalue和value兩個屬性 其中hasvalue為bool,value為該例項的值 可空型別的例項只包含乙個方法 getvalueordefault ...
可空型別 ?和??
可空型別可以表示所有實際型別的值加上null。如果和資料庫打交道,這就會很有用,因為在資料庫表中遇到未定義的列是很常見的事情。為了定義乙個可空變數型別,應在底層資料型別中新增問號 作為字尾。注意,這種語法只對值型別是合法的,區域性可空變數必須賦值乙個初始值。定義一些區域性可空型別 int?a 10 ...