4
 bool? ispurchased = null;
    var pospurcahsed= ispurchased ? "1":"2";

它产生异常。

不能隐式转换类型“bool?” '布尔'。存在显式转换(您是否缺少演员表?)

我在这里做错了什么?感谢您的支持和考虑。

4

5 回答 5

7

这是不允许的,因为不清楚 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 属性不同)。

于 2013-05-09T06:46:35.073 回答
2

您遇到的问题是条件运算符? :需要 a bool,而不是 a bool?。你可以直接转换它并完成,但InvalidOperationException如果值包含 a ,你会得到 a null,所以你应该先检查一下。

给定变量的名称,我继续假设您想像对待 anull一样对待 a false,所以在下面的代码中我检查以确保它有一个值,如果有,那么它将使用它条件。如果它没有值(即,null那么强制转换将永远不会发生,并且您不会得到错误(表达式将评估为假)。

bool? ispurchased = null;
var pospurcahsed = (ispurchased.HasValue && (bool)ispurchased) ? "1":"2";
于 2013-05-09T06:49:40.327 回答
2

你应该使用.value

bool? ispurchased = null;

if (ispurchased.HasValue)
{
    var pospurcahsed = ispurchased.Value ? "1" : "2";
}
于 2013-05-09T06:52:36.477 回答
1

您不能直接使用Nullable<bool>or bool?in condition ,而是像这样使用它:

var pospurcahsed= (ispurchased.HasValue && ispurchased.Value) ? "1":"2";
于 2013-05-09T06:50:14.733 回答
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";
于 2013-05-09T07:02:27.840 回答