foreach (PropertyInfo PropertyItem in this.GetType().GetProperties())
{
PropertyItem.SetValue(this, objDataTable.Rows[0][PropertyItem.Name.ToString()], null);
}
在其中一个循环中,我遇到了这个特殊错误:
'System.DBNull'类型的对象无法转换为'System.String'类型。
发生错误是因为数据库中的某个字段没有值(null),因此字符串属性无法处理它。如何将此null转换为字符串?
如果您知道更短或更好的,请随意发布。我试图避免检查每个循环当前值是否为空。
答案 0 :(得分:5)
Ben得到它几乎是正确的(我实际上认为这只是他身边的一个“错字”但我不能为他编辑)。这应该可以解决问题。
foreach (PropertyInfo PropertyItem in this.GetType().GetProperties())
{
var value = objDataTable.Rows[0][PropertyItem.Name.ToString()];
PropertyItem.SetValue(this, value == DBNull.Value ? "" : value.ToString() , null);
}
并且你需要测试每次迭代,因为它是给定行中给定单元格中的值,在使用它们之前,实际上没有办法避免检查每个单元格值
答案 1 :(得分:1)
除了在有解除引用或方法调用的地方检查null之外,没有其他解决方案。
如果PropertyItem.Name
可以为null或PropertyItem.SetValue
无法接受空值,那么有来检查每个循环。
答案 2 :(得分:0)
foreach (PropertyInfo PropertyItem in this.GetType().GetProperties())
{
string strValue = objDataTable.Rows[0][PropertyItem.Name.ToString()] == DbNull.Value ? String.Empty : objDataTable.Rows[0][PropertyItem.Name.ToString()].ToString();
PropertyItem.SetValue(this, strValue, null);
}