为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

忽然笑 2019-06-19 16:23:08
可空类型和三值运算符:为什么‘?10:空’是被禁止的?我只是遇到了一个奇怪的错误:private bool GetBoolValue(){     //Do some logic and return true or false}然后,在另一种方法中,如下所示:int? x = GetBoolValue() ? 10 : null;简单,如果方法返回true,则将10赋值给Nullableint否则,将空赋值给可空INT。但是,编译器会抱怨:错误1不能确定条件表达式的类型,因为在int和<null>.我要疯了吗?
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

编译器首先尝试计算右侧表达式:

GetBoolValue() ? 10 : null

这个10int字面(非)int?)和null是,嗯,null..这两者之间没有隐式转换,因此出现了错误消息。

如果将右侧表达式更改为下列之一,则会进行编译,因为在以下内容之间存在隐式转换。int?null(#1)intint? (#2, #3).

GetBoolValue() ? (int?)10 : null    // #1
GetBoolValue() ? 10 : (int?)null    // #2
GetBoolValue() ? 10 : default(int?) // #3


查看完整回答
反对 回复 2019-06-19
?
千万里不及你

TA贡献1784条经验 获得超9个赞

试试这个:

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

基本情况是,条件运算符无法确定表达式的“返回类型”。因为编译器间接地决定10int然后,它决定此表达式的返回类型应为int也是。因为int不可能null(条件运算符的第三个操作数)它抱怨。

通过铸造null转到Nullable<int>我们正在显式地告诉编译器,这个表达式的返回类型应该是Nullable<int>..你本可以很容易的10int?也有同样的效果。


查看完整回答
反对 回复 2019-06-19
?
HUH函数

TA贡献1836条经验 获得超4个赞

试试这个:

int? result = condition ? 10 : default(int?);


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 322 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信