C# 为什么不';这两个表达式在语义上不是等价的吗?
为什么第一个测试会引发编译器错误,而第二个测试不会?在我看来,它们在语义上是等价的C# 为什么不';这两个表达式在语义上不是等价的吗?,c#,C#,为什么第一个测试会引发编译器错误,而第二个测试不会?在我看来,它们在语义上是等价的 public bool? inlineTest(bool input) { return input ? null : input; } public bool? expandedTest(bool input) { if (input) return input; else return null; } 条件运算符要求两个操作数的类型相同null和bo
public bool? inlineTest(bool input)
{
return input ? null : input;
}
public bool? expandedTest(bool input)
{
if (input)
return input;
else
return null;
}
条件运算符要求两个操作数的类型相同
null
和bool
不兼容,并且没有从bool
到null
的自动转换。您需要明确地强制转换:
return input ? (bool?)input : null;
另一方面,存在从
bool
到bool?
的自动转换,以及从null
到bool?
的自动转换,这就是为什么可以从bool?
方法返回bool
和null
。类型推断规则声明:
第一个_表达式和第二个_表达式的类型必须是
相同,或者必须存在从一种类型到另一种类型的隐式转换
因此,如果bool?
,编译器可以推断出类型
这种类型推断不会发生在
if
语句中,因此您的工作是显式地声明类型。使用条件运算符时,两个操作数应具有相同的数据类型 expandedTest的等价物不是返回输入吗?(bool?)输入:空代码>?@Fermin:你说得对,条件中的逻辑是颠倒的。我复制粘贴了操作中的代码。现在修复。