我尝试做类似的事情:
bool? Verified;
Verified = Request.QueryString["verifed"]==null
? null :bool.Parse(Request.QueryString["verifed"]);
但我收到了错误:
无法确定条件表达式的类型,因为
<null>
和bool
之间没有隐式转换
有一种简单的单行方式可以做到这一点,而不是像:
if (Request.QueryString["confirmed"] == null)
Confirmed = null;
else
Confirmed = bool.Parse(Request.QueryString["confirmed"]);
答案 0 :(得分:3)
您收到错误,因为编译器尝试对?:
运算符使用相同的返回类型(bool
)。
由于您无法将null
转换为bool
,因此您可以将bool
转换为bool?
代替:
Verified = Request.QueryString["verifed"] == null ? null :
(bool?)bool.Parse(Request.QueryString["verifed"]);
答案 1 :(得分:0)
使用default
关键字;
bool? Verified;
Verified = Request.QueryString["verifed"] == null ? default(bool?) : bool.Parse(Request.QueryString["verifed"]);
如果有人不确定,default(bool?)
的结果为null
。
需要更多信息。读取。
What is the use of `default` keyword in C#?
What does default(object); do in C#?
答案 2 :(得分:0)
我认为您的查询参数是空字符串,因此您在转换时收到此错误。另外为什么使用可空的bool,只要在值为null或“”时放置false。
bool initialValue = false;
bool verified = Request.QueryString["verifed"]==null || Request.QueryString["verifed"] == "" ? false:bool.TryParse(Request.QueryString["verifed"], out initialValue);
答案 3 :(得分:-2)
改变这个:
Verified = Request.QueryString["verifed"]==null? null :bool.Parse(Request.QueryString["verifed"]);
到此:
Verified = Request.QueryString["verifed"]==null? (bool?)null :bool.Parse(Request.QueryString["verifed"]);
这方面的例子是:
bool test = true;
var test = 1 == 1 ? true : false; // Good
bool? test2 = true;
var test2 = 1 == 1 ? (bool?)null : false; // Good
var test2 = 1 == 1 ? null : false; // Error: Type of conditional expression cannot be determined because there is no implicit conversion between <null> and bool
更多信息:
C# : Implicit conversion between '<null>' and 'bool'
In C# why can't a conditional operator implicitly cast to a nullable type