考虑以下方法:
public object Foo(bool flag)
{
if (flag)
return (new object(), new object());
return (null, new object()); //Compiler error over here!!
}
这不会编译显示我在这个问题的标题中提到的错误。我可以通过像下面这样的演员来解决这个问题:
public object Foo(bool flag)
{
if (flag)
return (new object(), new object());
return ((object)null, new object());
}
到目前为止,一切都很好。奇怪的部分和我问这个的原因是,如果我更改语法并使用三元运算符而不是 if-else 语句,如下所示:
public object Boo(bool flag) => flag
? (new object(), new object())
: (null, new object());
然后就不需要演员了!!!为什么?恕我直言,编写该方法的两种方式在语义上都是相等的。我知道生成的 IL 可能不一样(没有检查过)。