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;