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

时间:2008-12-01 10:36:31

标签: c# nullable

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

int? accom = (accomStr == "noval" ? null  : Convert.ToInt32(accomStr));

该代码出了什么问题?

4 个答案:

答案 0 :(得分:235)

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

int? accom = (accomStr == "noval" ? (int?)null : Convert.ToInt32(accomStr));

答案 1 :(得分:40)

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

int? accom = (accomStr == "noval" ? null : (int?)Convert.ToInt32(accomStr));

也可以做到这一点。 (我们Resharper用户总能在人群中发现彼此......)

答案 2 :(得分:6)

另一种选择是使用

int? accom = (accomStr == "noval" ? Convert.DBNull : Convert.ToInt32(accomStr); 

我最喜欢这个。

答案 3 :(得分:1)

同样地,我做了很长时间:

myLongVariable = (!string.IsNullOrEmpty(cbLong.SelectedItem.Value)) ? Convert.ToInt64(cbLong.SelectedItem.Value) : (long?)null;