无法确定条件表达式的类型,因为';int';和'<;空>';

本文关键字:int lt gt 无法确定 表达式 类型 因为 条件 | 更新日期: 2023-09-27 18:27:41

这是我的代码:

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';和'<;空>';

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

int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue)为int且不可为null,因此参数之间不匹配,即int和null

如果你这样做的话,即使这样也没问题。现在,这会将第一个参数唤醒为可为null的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已回答链接

结果=表达式1?表达2:表达3;

表达式2和表达式3必须是同一类型。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;

这样做

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是条件表达式的类型。否则,无法确定表达式类型,并且编译时出现错误。