簡體   English   中英

轉換可空<bool>布爾

[英]Converting Nullable<bool> to bool

我收到此編譯器錯誤:

不能隱式轉換類型“bool?” '布爾'。 存在顯式轉換(您是否缺少演員表?)。

對於以下代碼:

 xEnable = was.xEnable;

xEnable是 DB 中的可空列。

這意味着

xEnable is of type bool 

was.xEnable is of type bool? (ie: nullable bool)

做類似的事情

xEnable = was.xEnable.HasValue ? was.xEnable.Value : false;

其中false是默認值,如果was.xEnable == null

編輯或者如果你真的想要你可以使用?? 操作員喜歡

xEnable = was.xEnable ?? true;

要么

xEnable = was.xEnable ?? false;

實際使用?? 就像你的標題一樣,去

xEnable = was.xEnable ?? false;

如果您希望xEnablefalse如果was.xEnablenull ,或

xEnable = was.xEnable ?? true;

如果您希望xEnabletrue如果was.xEnablenull

對於 C# 8.0 及更高版本,您可以使用?? 操作員,正如你所問的,做

xEnable = was.xEnable ?? false;

如果您希望false成為was.xEnablenull時的默認值。

如果您知道was.xEnable不為 null,則可以使用

xEnable = was.xEnable.Value

如果要在was.xEnablenull時使用默認值,可以執行以下操作

bool defaultValue = false;
xEnable = was.xEnable ?? defaultValue;

您是否嘗試將空值實際傳遞給數據庫? 如果是這樣的話:

xEnable = was.xEnable.HasValue ? was.xEnable.Value : DBNull.Value;
bool a = false; 
bool? b = null; 
a = (bool)b;

這將在bnull情況下引發異常。

所以可能的解決方案是:

  • 你知道b永遠不會為null ,所以使用這個模式(壞)
  • 通過bool? a = false也可以abool? a = false bool? a = false ;
  • 檢查b nulla = (b == null)?false:b.Value;

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM