为什么我不能在一个三元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); 
  • 从完整文件path获取文件夹名称 - C#,ASP.NET
  • XmlDocument - 从string加载?
  • 如何在ASP.NET MVC中呈现HTMLstring?
  • 表单身份validation忽略默认文档
  • 在asp.net的样式表path中使用斜线(/)和波浪线斜线(〜/)
  • 我应该如何在ASP.NET 4中执行长时间运行的任务?
  • cachingVS会话VS Cookie?
  • 如何为ASP.NET MVC 2创build自定义成员资格提供程序?
  • 如何获取部署在Azure网站上的ASP.NET 5应用程序的错误详细信息?
  • WebSockets的ASP.NET教程
  • 为什么我应该使用int而不是一个字节或C#中的短