可空类型和三值运算符:为什么‘?10:空’是被禁止的?

可空类型和三值运算符:为什么‘?10:空’是被禁止的?

我只是遇到了一个奇怪的错误:

private bool GetBoolValue(){
    //Do some logic and return true or false}

然后,在另一种方法中,如下所示:

int? x = GetBoolValue() ? 10 : null;

简单,如果方法返回true,则将10赋值给Nullableint否则,将空赋值给可空INT。但是,编译器会抱怨:

错误1不能确定条件表达式的类型,因为在int<null>.

我要疯了吗?


忽然笑
浏览 323回答 3
3回答

大话西游666

编译器首先尝试计算右侧表达式:GetBoolValue()&nbsp;?&nbsp;10&nbsp;:&nbsp;null这个10是int字面(非)int?)和null是,嗯,null..这两者之间没有隐式转换,因此出现了错误消息。如果将右侧表达式更改为下列之一,则会进行编译,因为在以下内容之间存在隐式转换。int?和null(#1)int和int?&nbsp;(#2, #3).GetBoolValue()&nbsp;?&nbsp;(int?)10&nbsp;:&nbsp;null&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;#1 GetBoolValue()&nbsp;?&nbsp;10&nbsp;:&nbsp;(int?)null&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;#2 GetBoolValue()&nbsp;?&nbsp;10&nbsp;:&nbsp;default(int?)&nbsp;//&nbsp;#3

千万里不及你

试试这个:int?&nbsp;x&nbsp;=&nbsp;GetBoolValue()&nbsp;?&nbsp;10&nbsp;:&nbsp;(int?)null;基本情况是,条件运算符无法确定表达式的“返回类型”。因为编译器间接地决定10是int然后,它决定此表达式的返回类型应为int也是。因为int不可能null(条件运算符的第三个操作数)它抱怨。通过铸造null转到Nullable<int>我们正在显式地告诉编译器,这个表达式的返回类型应该是Nullable<int>..你本可以很容易的10到int?也有同样的效果。

HUH函数

试试这个:int? result = condition ? 10 : default(int?);
打开App,查看更多内容
随时随地看视频慕课网APP