【问题标题】:Type of conditional expression cannot be determined because there is no implicit conversion between 'int' and '<null>'无法确定条件表达式的类型,因为 'int' 和 '<null>' 之间没有隐式转换
【发布时间】:2013-08-15 08:59:03
【问题描述】:

这是我的代码:

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;

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

【问题讨论】:

    标签: c#


    【解决方案1】:

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

    int.Parse((e.Item.FindControl("BankName_dd") as DropDownList).SelectedValue) 是 int 且不可为空,因此参数(即 int 和 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 already answered Link

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        这样做

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

        【讨论】:

          猜你喜欢
          • 2013-08-18
          • 2021-12-10
          • 1970-01-01
          • 1970-01-01
          • 2018-03-14
          • 1970-01-01
          • 1970-01-01
          • 2018-09-27
          • 2016-03-08
          相关资源
          最近更新 更多