C# 可空布尔的编译器错误
它正在生成异常 无法将类型“bool”隐式转换为“bool”。明确的 存在转换(您是否缺少演员阵容?) 我做错了什么?C# 可空布尔的编译器错误,c#,C#,它正在生成异常 无法将类型“bool”隐式转换为“bool”。明确的 存在转换(您是否缺少演员阵容?) 我做错了什么? 感谢您的支持和考虑。这是不允许的,因为不清楚null在条件语句上下文中的含义 可空布尔值可以显式转换为布尔值,以便在条件中使用,但如果对象的值为null,则将抛出InvalidOperationException 因此,在转换到bool之前检查HasValue属性非常重要 像 bool? ispurchased = null; var pospurcahsed= is
感谢您的支持和考虑。这是不允许的,因为不清楚null在条件语句上下文中的含义
可空布尔值
可以显式转换为布尔值
,以便在条件中使用,但如果对象的值为null,则将抛出InvalidOperationException
因此,在转换到bool
之前检查HasValue属性非常重要
像
bool? ispurchased = null;
var pospurcahsed= ispurchased ? "1":"2";
可空布尔值类似于SQL中使用的布尔变量类型。为确保&和|运算符生成的结果与SQL的三值布尔类型一致,提供了以下预定义运算符:
var pospurcahsed= (ispurchased.HasValue && ispurchased.Value) ?......
或者您可以使用martin
建议GetValueOrDefault
[感谢martin指出]
即使
HasValue
属性为false(与引发异常的value属性不同),getValuerDefault方法也会返回一个值 您遇到的问题是条件运算符?:代码>要求的是bool
,而不是bool?
。您可以将其强制转换并完成,但如果该值包含一个null
,则会得到一个invalidoOperationException
,因此您可能应该首先检查该值
给定变量的名称,我假设您希望像对待false
一样对待null
,因此在下面的代码中,我检查它是否有值,如果它有值,那么它将在条件中使用它。如果它没有值(即null
),则不会发生强制转换,也不会出现错误(表达式的计算结果将为false)
您不能在条件中直接使用Nullable
或bool?
,而是像以下那样使用它:
bool? ispurchased = null;
var pospurcahsed = (ispurchased.HasValue && (bool)ispurchased) ? "1":"2";
您应该使用.value
var pospurcahsed= (ispurchased.HasValue && ispurchased.Value) ? "1":"2";
你可以用这样的东西
bool? ispurchased = null;
if (ispurchased.HasValue)
{
var pospurcahsed = ispurchased.Value ? "1" : "2";
}
我建议不要对已知类型使用var
关键字
而不是像这样使用:
bool? chk = false;
//or
bool? chk2 = false;
var test = (chk != null && (bool)chk) ? "1": "2";
//or
var test2 = (chk2.HasValue && (bool)chk2) ? "1" : "2";
这不是我得到的错误消息,我的错误消息是,无法将类型“bool”隐式转换为“bool”。存在显式转换(是否缺少强制转换?)1
@George Duckett很抱歉输入错误。ispurchased.HasValue&&ispurchased.Value
可以重新编写为ispurchased==true
,这在我看来更具可读性。或者作为ispurchased.GetValueOrDefault()
@hvd不会isPurchased==true
抛出空值?@Tejas-否。比较bool
和bool?
doh很好。这很有意义。谢谢
bool? chk = false;
//or
bool? chk2 = false;
var test = (chk != null && (bool)chk) ? "1": "2";
//or
var test2 = (chk2.HasValue && (bool)chk2) ? "1" : "2";
String test = (chk != null && (bool)chk) ? "1" : "2";