2011-02-17 77 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(),或者您也可以使用包括一个明确的默认超载。