无法确定条件表达式的类型,因为'int'和'<null>'</null>之间没有隐式转换

时间:2013-08-15 08:59:04

标签: 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;

但我不明白为什么会出现这个错误的任何建议?

3 个答案:

答案 0 :(得分:2)

这是因为编译器首先尝试评估右侧。

int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue)是int且不可为空,因此参数之间存在不匹配,即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;

SO already answered Link

答案 1 :(得分:1)

这样做

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是条件表达式的类型。   否则,不能确定表达式类型和编译时   发生错误。

答案 2 :(得分:1)

  

result = expression1? expression2:expression3;

expression2和expression3必须属于同一类型。并且null不是有效的int,因此如果expression2是int,则expression3不允许null。你可以用int吗?通过将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;
相关问题