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;