C# 无法确定条件表达式的类型,因为“int”和“”之间没有隐式转换

C# 无法确定条件表达式的类型,因为“int”和“”之间没有隐式转换,c#,C#,这是我的代码: int? BankName_dd = int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue) != -1 ? int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue) : null; 但我不明白为什么会有人提出这个错误,有什么建议吗 像这样做 int? BankName_dd = i

这是我的代码:

int? BankName_dd = 
int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue) != -1 ? 
int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue) : null;
但我不明白为什么会有人提出这个错误,有什么建议吗

像这样做

int? BankName_dd = int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue) != -1 ? int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue):(int?)null;
不过,您的代码可以重构

int? BankName_dd = int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue);

if(BankName_dd.Value == -1)
   BankName_dd = null;
原因。C 3.0规范的相关章节为7.13,条件运算符:

?运算符的第二个和第三个操作数控制 条件表达式。设X和Y是第二个和第二个的类型 第三个操作数。那么

如果X和Y是同一类型,则这是条件的类型 否则,如果存在从X到Y的隐含转换§6.1,但是 不是从Y到X,那么Y是条件表达式的类型。 否则,如果存在从Y到X的隐含转换§6.1,但是 不是从X到Y,那么X是条件表达式的类型。 否则,无法确定表达式类型,并且需要编译时 发生错误

像这样做

int? BankName_dd = int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue) != -1 ? int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue):(int?)null;
不过,您的代码可以重构

int? BankName_dd = int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue);

if(BankName_dd.Value == -1)
   BankName_dd = null;
原因。C 3.0规范的相关章节为7.13,条件运算符:

?运算符的第二个和第三个操作数控制 条件表达式。设X和Y是第二个和第二个的类型 第三个操作数。那么

如果X和Y是同一类型,则这是条件的类型 否则,如果存在从X到Y的隐含转换§6.1,但是 不是从Y到X,那么Y是条件表达式的类型。 否则,如果存在从Y到X的隐含转换§6.1,但是 不是从X到Y,那么X是条件表达式的类型。 否则,无法确定表达式类型,并且需要编译时 发生错误


之所以会发生这种情况,是因为编译器试图首先计算右侧

int.Parsee.Item.FindControlBankName\u dd as DropDownList.SelectedValue为int且不可为null,因此参数(即int和null)之间存在不匹配

如果你这样做,即使这样也没问题。现在将第一个参数唤醒为nullable int

int? BankName_dd = int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue) != -1 ? (int?)int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue):null;

之所以会发生这种情况,是因为编译器试图首先计算右侧

int.Parsee.Item.FindControlBankName\u dd as DropDownList.SelectedValue为int且不可为null,因此参数(即int和null)之间存在不匹配

如果你这样做,即使这样也没问题。现在将第一个参数唤醒为nullable int

int? BankName_dd = int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue) != -1 ? (int?)int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue):null;
结果=表达式1?表达式2:表达式3

expression2和expression3必须是同一类型。并且null不是有效的int,因此如果expression2是int,则expression3不允许null。你可以用int吗?通过将null强制转换为null并使用int到int的隐式转换,将两者都作为类型?在左边

不过你的表情没有多大意义。你把所有的工作都做了两次

var result = int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue); 

int? BankName_dd = null;

if(result != -1) BankName_dd = result;
结果=表达式1?表达式2:表达式3

expression2和expression3必须是同一类型。并且null不是有效的int,因此如果expression2是int,则expression3不允许null。你可以用int吗?通过将null强制转换为null并使用int到int的隐式转换,将两者都作为类型?在左边

不过你的表情没有多大意义。你把所有的工作都做了两次

var result = int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue); 

int? BankName_dd = null;

if(result != -1) BankName_dd = result;