c#为什么不能为一个可为null的int赋值为null
解释为什么一个可空的int不能被赋值为null,例如
int? accom = (accomStr == "noval" ? null : Convert.ToInt32(accomStr));
那个代码有什么问题?
问题不是空值不能分配给一个int? 问题是三元运算符返回的值必须是相同的types,否则必须隐式转换为另一个。 在这种情况下,null不能被隐式地转换为int,也不能相反,所以需要一个明确的转换。 试试这个:
int? accom = (accomStr == "noval" ? (int?)null : Convert.ToInt32(accomStr));
Harry S所说的完全正确,但是
int? accom = (accomStr == "noval" ? null : (int?)Convert.ToInt32(accomStr));
也会做的伎俩。 (我们Resharper的用户总是可以在人群中互相识别…)
另一个select是使用
int? accom = (accomStr == "noval" ? Convert.DBNull : Convert.ToInt32(accomStr);
我最喜欢这个。
同样我也做了很长时间:
myLongVariable = (!string.IsNullOrEmpty(cbLong.SelectedItem.Value)) ? Convert.ToInt64(cbLong.SelectedItem.Value) : (long?)null;