2011-02-17 90 views
11

我有一個對象AlternateName.IsMaidenName鑄造可空布爾爲bool

我要強制轉換成一個複選框 - IsMaidenName

它不會讓我投的是因爲它說無法轉換源可空類型到目標類型布爾。

我在我們的應用程序的其他位置有過這個問題,但我想把它放在那裏以更好地處理這些問題。

IsMaidenNameChecked = AlternateName.IsMaidenName; 

回答

28

這是很合乎邏輯,你不能施放一個可空布爾爲BOOL,因爲在布爾應該有什麼樣的價值,當可爲空包含空?

我會做什麼,是這樣的:

IsMaidenNameChecked = AlternateName.IsMaidenName ?? false; 
1

複選框和Nullable<bool>都有三個狀態:「true」,「false」和「missing」。

但是,您正試圖將該值存儲在無法處理「缺失」的中間變量bool中。

嘗試將您的bool變量更改爲bool?

17
IsMaidenName.Checked = AlternateName.IsMaidenName.GetValueOrDefault(); 

參見:http://msdn.microsoft.com/en-us/library/72cec0e0.aspx

+1

在.NET中`bool`的默認值爲`false`的附加警告 - http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx – 2011-02-17 16:17:49

+1

請注意,有一個[過載] (http://msdn.microsoft.com/en-us/library/3d6d4f1d(v=vs.110).aspx) - 您可以說`GetValueOrDefault(true)`,也就是指定要返回的默認值情況爲空。所以你不限於返回'false'。 – David 2014-12-18 16:06:48

5

你可能想這樣做:

IsMaidenNameChecked = AlternateName.IsMaidenName.GetValueOrDefault(); 

Nullable.GetValueOrDefault(),或者您也可以使用包括一個明確的默認超載。