可空类型和三元运算符:为什么?10:禁止使用null?[重复]
我刚遇到一个奇怪的错误:
private bool GetBoolValue(){
//Do some logic and return true or false
}
然后,在另一种方法中,如下所示:
int? x = GetBoolValue() ? 10 : null;
很简单,如果该方法返回true,则将10分配给Nullable int
x。否则,将null分配给可为 int。但是,编译器抱怨:
错误1无法确定条件表达式的类型,因为
int
和之间没有隐式转换<null>
。
我疯了吗?
回答:
编译器首先尝试评估右手表达式:
GetBoolValue() ? 10 : null
的10
是一个int
文字(未int?
),并null
是,那么,null
。这两者之间没有隐式转换,因此会出现错误消息。
如果将右侧表达式更改为以下表达式之一,则它将进行编译,因为int?
和null
(#1)之间int
以及和int?
(#2,#3)之间存在隐式转换。
GetBoolValue() ? (int?)10 : null // #1GetBoolValue() ? 10 : (int?)null // #2
GetBoolValue() ? 10 : default(int?) // #3
以上是 可空类型和三元运算符:为什么?10:禁止使用null?[重复] 的全部内容, 来源链接: utcz.com/qa/414074.html