【问题标题】:Null validation for getting property values using reflection使用反射获取属性值的空验证
【发布时间】:2018-09-14 15:48:34
【问题描述】:

我正在尝试将通用值列表添加到字典中。

下面是 DocDetails 类

public class DocDetails
{
   public string DocId { get; set; }
   public string Description { get; set; }
   public string Category { get; set; }
}

我在docDetailsList 对象中获取DocDetails 的列表。使用它获取 DocDetails 的每个项目并获取属性名称和值,然后添加到字典中。

Dictionary<string, List<object>> docDict = new Dictionary<string, List<object>>();

  foreach (var doc in docDetailsList)
     {
          var dict = doc.GetType().GetProperties().ToDictionary(
            m => m.Name, m => new List<object>()
             {
                m.GetValue(doc, null).ToString()
             });
         docDict.Add(dict);
      }

当尝试在此行中获取属性值时,m.GetValue(doc, null).ToString() 如果值为 null,则会出现异常。 我如何验证它,即使它为空,我也需要将该属性名称添加到具有空值的列表中。有谁能帮帮我吗

【问题讨论】:

  • 如果您使用 C# >= 6,则可以使用空条件运算符:m.GetValue(doc, null)?.ToString(),对于旧版本,请使用临时变量和三元条件运算符。

标签: c# .net linq reflection


【解决方案1】:

代替:

m.GetValue(doc, null).ToString()

您可以在调用ToString()之前检查它是否为空:

m.GetValue(doc, null) != null ? m.GetValue(doc, null).ToString() : null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多