bool? ispurchased = null;
var pospurcahsed= ispurchased ? "1":"2";
它产生例外。
无法隐式转换类型'bool?' 'bool'。一个明确的 存在转换(你错过了演员吗?)
我在这里做错了什么? 感谢您的支持和考虑。
答案 0 :(得分:7)
这是不允许的,因为不清楚null在条件的上下文中意味着什么。
Nullable Booleans
可以显式转换为bool
以便在条件中使用,但如果对象的值为null,则会抛出InvalidOperationException
。
因此,在转换为bool
之前检查HasValue属性非常重要。
使用
var pospurcahsed= (ispurchased.HasValue && ispurchased.Value) ?......
Nullable Booleans类似于SQL中使用的布尔变量类型。确保&和|运算符与SQL的三值布尔类型一致,提供了以下预定义运算符:
bool? operator &(bool? x, bool? y)
bool? operator |(bool? x, bool? y)
或者您可以使用martin
建议GetValueOrDefault
[感谢马丁指出]
即使HasValue
属性为false,GetValueOrDefault方法也会返回一个值(与引发异常的Value属性不同)。
答案 1 :(得分:2)
您遇到的问题是条件运算符? :
需要bool
,而不是bool?
。您可以将其强制转换并完成,但如果值包含InvalidOperationException
,则会获得null
,因此您应该首先检查它。
鉴于您的变量的名称,我已经开始并假设您要像null
那样对待false
,所以在下面的代码中我会检查以确保它有一个值,如果确实如此,它将在条件中使用它。如果它没有值(即它是null
,则转换将永远不会发生并且您将不会得到错误(表达式将评估为false)。
bool? ispurchased = null;
var pospurcahsed = (ispurchased.HasValue && (bool)ispurchased) ? "1":"2";
答案 2 :(得分:2)
您应该使用 .value
bool? ispurchased = null;
if (ispurchased.HasValue)
{
var pospurcahsed = ispurchased.Value ? "1" : "2";
}
答案 3 :(得分:1)
您无法直接在条件中使用Nullable<bool>
或bool?
,而是使用它:
var pospurcahsed= (ispurchased.HasValue && ispurchased.Value) ? "1":"2";
答案 4 :(得分:0)
你可以使用这样的东西
bool? chk = false;
//or
bool? chk2 = false;
var test = (chk != null && (bool)chk) ? "1": "2";
//or
var test2 = (chk2.HasValue && (bool)chk2) ? "1" : "2";
我建议不要对已知类型使用var
关键字。
而不是这样使用像这样:
String test = (chk != null && (bool)chk) ? "1" : "2";