請問 C# 中判斷可空布爾類型變量值的正確姿勢是什么?如果直接判斷( bool? isOk; if (isOk) ; )會出現下面的錯誤提示:Cannot implicitly convert type 'bool?' to 'bool'
1 回答

暮色呼如
TA貢獻1853條經驗 獲得超9個贊
bool? success = null;if(success.GetValueOrDefault()){ //TODO: do what you want.}
原因:其實翻看 Nullable<T> 的源碼就應該知道,T 的約束是 struct(其實這應該算常識),對應的當類型為 Nullable<T> 的變量被“賦值”為null時, GetValueOrDefault() 返回的值實際上 等于 default(T) ,原因是 bool? success = null; 實際上對應的代碼是 bool? success = new Nullable<bool>();//所有結構都有一個默認無參數的構造函數。 (編譯器的功勞哦)。
當 bool? success = 后面跟的是一個編譯時無法確定是否為 null 的表達式時,編譯器會生成一個 if else 語句,判斷表達式運行的值,如果為 null 跟上面的一樣,調用默認無參數的構造函數,如果不為 null,則調用 public Nullable(T value) 有參構造函數。
- 1 回答
- 0 關注
- 2271 瀏覽
添加回答
舉報
0/150
提交
取消