有没有更优雅的方法来确定列表是否包含元素而不是使用count?

时间:2012-04-11 14:13:58

标签: c# list

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

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

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

6 个答案:

答案 0 :(得分:8)

您可以使用linq:

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

答案 1 :(得分:8)

Count是最佳选择 - 它是List<>的属性,意味着访问时间为O(1)

它也是描述性的。

答案 2 :(得分:2)

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

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

然后你会像这样使用它:

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

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

然而,我个人不喜欢的是它是一种方法而不是财产。 (如果C#添加了对“扩展属性”的支持,我个人会喜欢。)有例外,但对我来说,直觉上我希望某个属性能够给我一些关于某事物状态的信息(希望在{{ 1}} time as Oded mentions),而我期望一种方法“做某事”并对对象的状态产生某种副作用。

同样,这完全取决于个人偏好。只是一个可供选择的选项。

答案 3 :(得分:1)

您可以编写扩展方法,如下所示

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

请参阅此问题以获取更多信息 - Checking if a list is empty with LINQ

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

我把这张支票包裹在一个扩展名中(Null检查和检查项目是非常麻烦的)

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

// Usage
listOfFoo.IsAny()