解析bool的简单方法?在一条线上

时间:2016-02-03 08:52:42

标签: c# types casting type-conversion

我尝试做类似的事情:

        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"]);

4 个答案:

答案 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