Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将int转换为可为null的int_C#_Asp.net_Nullable - Fatal编程技术网

C# 无法将int转换为可为null的int

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

在我的C#应用程序中,我希望在如下对象中存储空值:

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正如我所说的,我在挑剔:-)。