解释为什么无法为int赋值为null,例如
int? accom = (accomStr == "noval" ? null : Convert.ToInt32(accomStr));
该代码出了什么问题?
答案 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;