C# 无法将int转换为可为null的int
在我的C#应用程序中,我希望在如下对象中存储空值:C# 无法将int转换为可为null的int,c#,asp.net,nullable,C#,Asp.net,Nullable,在我的C#应用程序中,我希望在如下对象中存储空值: if (txtClass8Year.Text == "") { distributor.Class8YrPassing = null; } else { distributor.Class8YrPassing = Convert.ToInt32(txtClass8Year.Text); } 但是,当我试图用一行字来写整个陈述时,它不起作用: (txtClass8Year.Text == "") ? null : Convert
if (txtClass8Year.Text == "")
{
distributor.Class8YrPassing = null;
}
else
{
distributor.Class8YrPassing = Convert.ToInt32(txtClass8Year.Text);
}
但是,当我试图用一行字来写整个陈述时,它不起作用:
(txtClass8Year.Text == "") ? null : Convert.ToInt32(txtClass8Year.Text);
提前谢谢
Partha您需要将
int
结果转换回Nullable
,因为int
的类型与int?
的类型不同,并且它们不能隐式转换到和从中转换,因此我们需要具体说明:
distributor.Class8YrPassing = (txtClass8Year.Text == "")
? null
: (int?)Convert.ToInt32(txtClass8Year.Text);
或者,您也可以将null
强制转换为int?
,这样也可以:
distributor.Class8YrPassing = (txtClass8Year.Text == "")
? (int?)null
: Convert.ToInt32(txtClass8Year.Text);
至于三元运算符,我们需要确保在这两种情况下返回相同的类型,否则编译器将给出如上所述的错误
还有一个建议是最好使用String.IsNullOrEmpty
方法,而不是检查”
文本字符串:
distributor.Class8YrPassing = String.IsNullOrEmpty(txtClass8Year.Text) || String.IsNullOrWhiteSpace(txtClass8Year.Text)
? null
: (int?)Convert.ToInt32(txtClass8Year.Text);
可能重复挑剔:将
null
强制转换为int?
是多余的(int?.null
可以简化为null
@zoharped On返回值必须明确三元运算符的返回数据类型:是什么。Null可以是任何东西。Convert.ToInt32()返回int。两者都不隐式匹配int?。因此,您需要将int转换为int?或者实际描述空值的实际类型,因此(int?)为空。请参阅上面Ehsan的两个不同选项。@DeeJ.Doena正如我所说的,我在挑剔:-)。