将Null值转换为String - C#.NET

时间:2010-05-23 10:50:55

标签: c# .net vb.net reflection

    foreach (PropertyInfo PropertyItem in this.GetType().GetProperties())
    {
        PropertyItem.SetValue(this, objDataTable.Rows[0][PropertyItem.Name.ToString()], null);
    }

在其中一个循环中,我遇到了这个特殊错误:

'System.DBNull'类型的对象无法转换为'System.String'类型。

发生错误是因为数据库中的某个字段没有值(null),因此字符串属性无法处理它。如何将此null转换为字符串?

I got this solution

如果您知道更短或更好的,请随意发布。我试图避免检查每个循环当前值是否为空。

3 个答案:

答案 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);
    }