bool? ispurchased = null;
var pospurcahsed= ispurchased ? "1":"2";
它产生异常。
不能隐式转换类型“bool?” '布尔'。存在显式转换(您是否缺少演员表?)
我在这里做错了什么?感谢您的支持和考虑。
bool? ispurchased = null;
var pospurcahsed= ispurchased ? "1":"2";
它产生异常。
不能隐式转换类型“bool?” '布尔'。存在显式转换(您是否缺少演员表?)
我在这里做错了什么?感谢您的支持和考虑。
这是不允许的,因为不清楚 null 在条件上下文中的含义。
Nullable Booleans
可以bool
显式地转换为 a 以便在条件中使用,但如果对象有一个值为 null 的值,InvalidOperationException
则将被抛出。
因此,在转换为 之前检查 HasValue 属性很重要bool
。
使用喜欢
var pospurcahsed= (ispurchased.HasValue && ispurchased.Value) ?......
可空布尔值类似于 SQL 中使用的布尔变量类型。确保 & 和 | 产生的结果 运算符与 SQL 的三值布尔类型一致,提供了以下预定义的运算符:
bool? operator &(bool? x, bool? y)
bool? operator |(bool? x, bool? y)
或者您可以使用martin
建议GetValueOrDefault
[感谢马丁指出]
即使HasValue
属性为 false,GetValueOrDefault 方法也会返回一个值(与引发异常的 Value 属性不同)。
您遇到的问题是条件运算符? :
需要 a bool
,而不是 a bool?
。你可以直接转换它并完成,但InvalidOperationException
如果值包含 a ,你会得到 a null
,所以你应该先检查一下。
给定变量的名称,我继续假设您想像对待 anull
一样对待 a false
,所以在下面的代码中我检查以确保它有一个值,如果有,那么它将使用它条件。如果它没有值(即,null
那么强制转换将永远不会发生,并且您不会得到错误(表达式将评估为假)。
bool? ispurchased = null;
var pospurcahsed = (ispurchased.HasValue && (bool)ispurchased) ? "1":"2";
你应该使用.value
bool? ispurchased = null;
if (ispurchased.HasValue)
{
var pospurcahsed = ispurchased.Value ? "1" : "2";
}
您不能直接使用Nullable<bool>
or bool?
in condition ,而是像这样使用它:
var pospurcahsed= (ispurchased.HasValue && ispurchased.Value) ? "1":"2";
你可以使用这样的东西
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";