?:條件運算符 根據 Boolean 表達式的值返回兩個值之一。
下面是條件運算符的語法。
condition ? first_expression : second_expression;
condition 的計算結果必須爲 true 或 false。 如果 condition 爲 true,則將計算 first_expression 並使其成爲結果。 如果 condition 爲 false,則將計算 second_expression 並使其成爲結果。 只計算兩個表達式之一。
first_expression 和 second_expression 的類型必須相同,或者必須存在從一種類型到另一種類型的隱式轉換。
條件運算符爲右聯運算符。 表達式 a ? b : c ? d : e 作爲 a ? b : (c ? d : e) 而非 (a ? b : c) ? d : e 進行計算。
無法重載條件運算符。
int a = 6;
int b = 6;
bool isSame = a == b ? true : false;
isSame 的結果爲true;
?? 運算符稱作 null 合併運算符。如果此運算符的左操作數不爲 null,則此運算符將返回左操作數;否則返回右操作數。
可以爲 null 的類型可以表示類型的域中的值,或者值可以是未定義的(在這種情況下,值爲 null)。 當左操作數具有一個值爲 null 的可以爲 null 的類型時,可以使用 ?? 運算符的語法表現力來返回適當的值(右操作數)。 如果在嘗試將可以爲 null 值的類型分配給不可以爲 null 值的類型時沒有使用 ?? 運算符,則會生成編譯時錯誤。 如果使用強制轉換,且當前未定義可以爲 null 值的類型,則會引發 InvalidOperationException 異常。
class NullCoalesce
{
static int? GetNullableInt()
{
return null;
}
static string GetStringValue()
{
return null;
}
static void Main()
{
int? x = null;
// Set y to the value of x if x is NOT null; otherwise,
// if x = null, set y to -1.
int y = x ?? -1;
// Assign i to return value of the method if the method's result
// is NOT null; otherwise, if the result is null, set i to the
// default value of int.
int i = GetNullableInt() ?? default(int);
string s = GetStringValue();
// Display the value of s if s is NOT null; otherwise,
// display the string "Unspecified".
Console.WriteLine(s ?? "Unspecified");
}
}
可以爲 null 的類型具有以下特性:
.可以爲 null 的類型表示可被賦值爲 null 值的值類型變量。 無法創建基於引用類型的可以爲 null 的類型。 (引用類型已支持 null 值。).語法 T? 是 Nullable 的簡寫,此處的 T 爲值類型。 這兩種形式可以互換。
.爲可以爲 null 的類型賦值的方法與爲一般值類型賦值的方法相同,如 int? x = 10; 或 double? d = 4.108。 對於可以爲 null 的類型,也可向其賦 null: int? x = null. 值
.如果基礎類型的值爲 null,請使用 Nullable.GetValueOrDefault 方法返回該基礎類型所賦的值或默認值,例如 int j = x.GetValueOrDefault();
.將 HasValue 和 Value 只讀屬性用於測試是否爲空和檢索值,如下面的示例所示:if(x.HasValue) j = x.Value;
.如果此變量包含值,則 HasValue 屬性返回 true;或者如果是 null 則返回 false。
.如果已賦值,則 Value 屬性返回該值。 否則,將引發 InvalidOperationException。
.HasValue 的默認值爲 false。 Value 屬性沒有默認值。
.還可以將 == 和 != 操作數用於可爲 null 的類型,如下面的示例所示:if (x != null) y = x;
.使用 ?? 算符分配默認值,在將當前值爲 null 的可以爲 null 的類型賦值給不可以爲 null 的類型時,將應用該默認值,如 int? x = null; int y = x ?? -1;
.不允許使用嵌套的可以爲 null 的類型。 將不編譯下面一行:Nullable<Nullable<int>> n;
Nullable<T> 結構支持
.對於一個類型,如果既可以給它分配一個值,也可以給它分配 null(表示沒有任何值),我們就說這個類型是可空的。 默認情況下,所有引用類型,如 String,可以爲空,但是,所有值類型,例如 Int32,不能爲空。
.在 C# 和 Visual Basic 中,可以通過使用 ? 表示方法在值類型之後標記一個值類型爲空。 例如,int? 在 C# 中或 Integer? 在Visual Basic 中聲明瞭可分配 null的整數值類型。
.Nullable<T> 結構支持只將一個值類型用作可以爲 null 的類型,因爲引用類型本身就是可空的。
.Nullable 類爲 Nullable<T> 結構提供補充支持。 Nullable 類支持獲取可以爲 null 的類型的基礎類型,對於其基礎值類型不支持泛型比較和相等比較運算的可以爲 null 的類型,該類支持對其進行比較和相等比較運算