1

目前,我使用以下过程来确定列表是否包含元素:

if (aList.Count > 0)
{
   //doStuff
}

我问自己是否有更优雅的方法来找出是否有元素,而不使用比较。

4

6 回答 6

8

您可以使用 linq:

if (aList.Any())
{
   //doStuff
}
于 2012-04-11T14:15:18.333 回答
8

Count是最好的选择——List<>访问时间是意义的属性O(1)

它也是描述性的。

于 2012-04-11T14:16:19.317 回答
2

我想如果这是困扰您的措辞并且您想要一种更具表现力的方式来描述它,您可以编写一个自定义扩展方法:

public static bool HasItems(this IList<T> list)
{
    return list.Count > 0;
}

然后你会像这样使用它:

if (aList.HasItems())
{
   //doStuff
}

这是个人喜好的问题,真的。HasItems例如,该术语听起来可能比听起来更直观Count > 0,甚至可能看起来更清晰(再次,主观地)。

但是,我个人不喜欢它是一种方法而不是属性。(如果 C# 增加对“扩展属性”的支持,我个人会高兴。)也有例外,但对我来说,直觉上我希望一个属性只是给我关于某物状态的信息(希望像 Oded 提到O(1)的那样及时),而我会期望一种方法“做某事”并对对象的状态产生某种副作用。

同样,这完全取决于个人喜好。只是一个可供您使用的选项。

于 2012-04-11T14:25:22.383 回答
1

您可以编写如下扩展方法

    public static Boolean IsEmpty<T>(this IEnumerable<T> sourceList)
    {
       return (sourceList==null) ? true : !sourceList.Any();
    } 

有关更多信息,请参阅此问题 -使用 LINQ 检查列表是否为空

于 2012-04-11T14:22:59.357 回答
0

这已经是一个最优雅的解决方案。

可以使用(只是一个示例)Count(x=>x..condition..);linq 类型来找出满足某些指定条件的元素的计数。

于 2012-04-11T14:15:30.537 回答
0

我将此检查包含在扩展中(空检查和检查项目很麻烦 imo)

  public static bool IsAny<T>(this IEnumerable<T> item)
  {
            return item != null && item.Any();
  }

// Usage
listOfFoo.IsAny() 
于 2012-04-11T14:30:40.983 回答