为什么我不能在一个三元if语句中将一个可为空的int设置为null?

下面的C#代码:

int? i; i = (true ? null : 0); 

给我的错误:

条件expression式的types不能确定,因为在'<null>'和'int'之间没有隐式转换

这不应该有效吗? 我在这里错过了什么?

3 Solutions collect form web for “为什么我不能在一个三元if语句中将一个可为空的int设置为null?”

编译器试图评估右边的expression式。 nullnull0是一个int文字,不是int? 。 编译器试图告诉你,它不能确定expression式应该评估什么types。 nullint之间没有隐式转换,因此是错误消息。

你需要告诉编译器该expression式应该评估为int?int?之间有一个隐式转换int?int ,或者nullint?之间int? ,所以这些应该工作:

 int? x = true ? (int?)null : 0; int? y = true ? null : (int?)0; 

处理三元运算符时,您需要使用default()关键字而不是null。

例:

 int? i = (true ? default(int?) : 0); 

或者,您可以只投射null:

 int? i = (true ? (int?)null : 0); 

我个人坚持default()表示法,这只是一个偏好,真的。 但是,你最终应该坚持一个特定的记法,恕我直言。

HTH!

部分(true ? null : 0)以某种方式成为函数。 这个函数需要返回types。 当编译器需要确定返回types时,它不能。

这工作:

 int? i; i = (true ? null : (int?)0); 
  • CS1617:/ langversion的选项'6'无效; 必须是ISO-1,ISO-2,3,4,5或默认
  • 系统是未定义的
  • ASP.NET中的请求或服务器是静态类实例吗?
  • 如何强制BundleCollection刷新MVC4中的caching脚本包
  • JQGRID - 维持checkboxselect状态 - 页面刷新/redirect/重载
  • 为什么访问path被拒绝?
  • 从数据注释的Asp.Net Mvc隐藏字段
  • 如何在某个button上设置默认的“回车”
  • 如何获取iframe的当前位置?
  • 为什么GET方法比POST更快?
  • 如何在GridView中添加页眉和子标题