【问题标题】:Check whether class members are null from Object list检查对象列表中的类成员是否为空
【发布时间】:2012-08-22 18:09:51
【问题描述】:

有没有办法检查特定的类成员是否为空?

我有一个有 N 个属性(成员)的类。我必须为该类创建许多对象,并且可以为这些属性分配值。我正在使用 List 来存储所有对象。

现在,我想检查列表中特定索引中的对象是否有任何属性为 null 或未设置?这可以在不使用循环或手动检查每个属性的情况下完成吗?

提前谢谢..

【问题讨论】:

  • LINQ 本质上是一个内联 for 循环,因此这也可能不是您正在寻找的解决方案。不确定任何非 LINQ 方法会更有效,因为您将不得不编写更多代码(这可能只会使其更加难以管理)。如果您将所有属性值存储在 List 中,您是否想过可能使用Any LINQ 扩展方法? listProperties.Any(prop => prop == null)?
  • 您列表中的所有对象是否都相同Type
  • 是的。它们都是字符串类型..

标签: c# .net linq object lambda


【解决方案1】:

假设您有一个AlistA 类型的项目列表。下面是一个 LINQ 表达式,它将查找列表中所有属性设置为 null 的项目:

var output = listA.Where(a => typeof (A).GetProperties()
                                        .Any(p => p.GetValue(a) == null))
            .Select((a, index) => index)
            .ToList();

【讨论】:

    【解决方案2】:

    您可以通过以下方式检查索引中的项目是否具有任何 null 属性:

    var item = myItems[indexToCheck];
    bool hasNullProperty = typeof(MyClass)
        .GetProperties()
        .Any(p => p.GetValue(item) == null);
    

    【讨论】:

      【解决方案3】:

      它可能需要一些工作,但这里是您可以使用的一般功能。老实说,我不确定这是否违反了您不使用循环/单独检查每个成员的限制(看看它是如何做到的)。

      public static bool AreAnyPropertiesNull(object obj)
      {
          foreach (var prop in obj.GetType().GetProperties())
          {
              object propertyValue = prop.GetValue(obj, null);
              if (propertyValue == null)
                  return true;
          }
          return false;
      }
      

      【讨论】:

        【解决方案4】:

        listOfObjects[i].HaveAnyOfPropertiesNullOrNotSet()

        我在这里没有看到循环。

        【讨论】:

        • @JaneDoe:这是 OP 的要求:“现在,我想检查列表中 特定索引 中的对象是否有任何属性为 null设置”。问题是这样的属性是无稽之谈。
        • @Tim:仅当它具有该名称时。将其更改为 IsValid ,现在它是有意义的。我不知道这个检查是干什么用的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-20
        • 1970-01-01
        相关资源
        最近更新 更多