c#为什么不能将nullable int赋值为null

man*_*yst 125 c# nullable

解释为什么无法为int赋值null,例如

int? accom = (accomStr == "noval" ? null  : Convert.ToInt32(accomStr));
Run Code Online (Sandbox Code Playgroud)

这段代码出了什么问题?

Har*_*ber 239

问题不在于null不能分配给int?.问题是三元运算符返回的两个值必须是相同的类型,或者必须可以隐式转换为另一个.在这种情况下,null不能隐式转换为int或者vs-versus,因此必须使用explict强制转换.试试这个:

int? accom = (accomStr == "noval" ? (int?)null : Convert.ToInt32(accomStr));
Run Code Online (Sandbox Code Playgroud)

  • 我宁愿默认(int?)over(int?)null; (8认同)
  • 这很有趣 - 你实际上并不需要转换为Convert.ToInt32 ...... (4认同)
  • 这是因为System.Int32!= System.Nullable <Int32> (2认同)

Wil*_*ean 40

Harry S所说的是完全正确的,但是

int? accom = (accomStr == "noval" ? null : (int?)Convert.ToInt32(accomStr));
Run Code Online (Sandbox Code Playgroud)

也会做的伎俩.(我们Resharper用户总能在人群中发现彼此......)

  • 现在这很好,这只是一个微妙的区别,但太简单了!如果可以的话会+2(尽管这是一件小事)=) (3认同)

小智 6

另一种选择是使用

int? accom = (accomStr == "noval" ? Convert.DBNull : Convert.ToInt32(accomStr); 
Run Code Online (Sandbox Code Playgroud)

我最喜欢这个.