C# 条件语句中的C可为null

C# 条件语句中的C可为null,c#,conditional,nullable,C#,Conditional,Nullable,为什么在第二个语句中需要显式强制转换 bool?a=零; 布尔b=假; bool c=真 1.) if(b | | c) a=b; 其他的 a=零 2.a=(b | | c)?(可空)b:null条件运算符是一个表达式,因此它需要一个返回类型-而且两种情况都必须具有相同的返回类型。在您的情况下,无法自动确定返回类型,因此您需要强制转换。要添加到Femaref,等效的“if”代码如下 private static bool? Assign(bool b, bool c) {

为什么在第二个语句中需要显式强制转换

bool?a=零;
布尔b=假;
bool c=真

1.)
if(b | | c)
a=b;
其他的
a=零


2.
a=(b | | c)?(可空)b:null

条件运算符是一个表达式,因此它需要一个返回类型-而且两种情况都必须具有相同的返回类型。在您的情况下,无法自动确定返回类型,因此您需要强制转换。

要添加到Femaref,等效的“if”代码如下

private static bool? Assign(bool b, bool c)
    {
        if (b || c)
        {
            return b;
        }
        else return null;
    }
...

a = Assign (b,c)

注意到了吗?返回类型。这就是条件运算符语句中发生的情况,它们不必是相同的类型,但第二个操作数必须隐式转换为第一个操作数的编译时类型。@recursive,或者第一个操作数隐式转换为第二个操作数。您要避免的是从每个操作数到另一个操作数的隐式转换,因为这也会导致歧义。这个问题的基础已经被问了好几次。这里有一个很好的答案,它不是三元运算符,而是条件运算符。三值运算符是一个包含三个操作数的运算符,可以有多个;)在此上下文中,条件运算符是三元运算符,对吗?是的,这是真的。然而,人们似乎可以互换使用三元运算符和条件运算符。虽然在C#中为true,但在其他语言中不一定为true,并且查看所有运算符时也不必为true。我只是想指出这一点,是的,就像在Ruby中一样,没有三元运算符,但我在这里有意识地使用它来理解讨论的上下文。无论如何,已编辑以更改为条件运算符。