【问题标题】:No implicit conversion between int and null [duplicate]int 和 null 之间没有隐式转换 [重复]
【发布时间】:2015-07-14 17:22:46
【问题描述】:

我有一个类,它具有如下可为空的属性;

public class Sample
{
   public int? ID { get; set; }
   public string SampleName { get; set; }
   public bool? Active { get; set; }
   public DateTime? Date { get; set; }
}

当我尝试执行以下操作时;

foreach (DataRow tableItem in table.Rows)
{
        Sample sample = new Sample()
        {
            ID = tableItem["ID"] != DBNull.Value ? Convert.ToInt32(tableItem["ID"].ToString()) : null,
            SampleName = tableItem["SampleName"] != DBNull.Value ? tableItem["SampleName"].ToString() : null,
            Active = tableItem["Active"] != DBNull.Value ? Convert.ToBoolean(tableItem["Active"].ToString()) : null,
            Date = tableItem["Date"] != DBNull.Value ? Convert.ToDateTime(tableItem["Date"].ToString()) : null,
        };

    data.Add(sample);
}

它给出了“无法确定条件表达式的类型,因为'int'和''之间没有隐式转换”这样的错误。

【问题讨论】:

  • 您有无法转换为 int 的空数据
  • 对于简单的情况(DBNull可以用默认值代替)我写了一个扩展方法: public static int ToIntEx(this object value, int defaultvalue = 0) { int result = defaultvalue; if (value != null && value != DBNull.Value) { Int32.TryParse(value.ToString(), out result); } 返回结果; }

标签: c# nullable implicit-conversion


【解决方案1】:

null 没有任何可识别的类型 - 它只需要一点刺激就可以让它快乐:示例如下所示。

int? number = true ? 5 : (int?)null;

或者你可以这样做

int? number = true ? 5 : null as int?;

【讨论】:

  • 您解决了这个问题吗?请不要忘记投票或接受堆栈溢出成员提供的答案。如果答案不正确或无用,您也可以对答案投反对票。
  • 是的,非常感谢。
猜你喜欢
  • 2013-12-22
  • 2010-11-19
  • 2019-06-21
  • 2016-06-24
  • 2023-03-17
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 2011-05-16
相关资源
最近更新 更多