nullable<T>一定要是value type,reference type本來就可以為null,optional string只是增加編譯時期的檢查。

定義範例

public struct Nullable<T> where T : struct
{
    public bool HasValue { get; }
    public T Value { get; }
}
 

正確取值的方式

假設Level是一個nullable<T>,正確取值的做法

if (Level.HasValue)
    result = Level.Value;

等價於條件運算式:

result = Level.HasValue ? Level.Value : result;

用null合併運算子可以再簡化成:

result = Level ?? result;
// 如果Level有值,就取Level.Value
// 如果Level沒有值,就執行result

?? 背後的行為 = 自動幫你判斷 HasValue 並取出 .Value