【发布时间】: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