有没有比使用计数更优雅的方式来找出列表是否有元素

本文关键字:方式 列表 元素 是否 有没有 | 更新日期: 2023-09-27 18:30:49

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

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

我问自己是否有一种更优雅的方法来找出是否存在元素,而无需使用比较。

有没有比使用计数更优雅的方式来找出列表是否有元素

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

它也是描述性的。

您可以使用 linq:

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

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

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

然后你会像这样使用它:

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

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

但是,我个人不喜欢的是它是一种方法而不是属性。 (我个人会喜欢 C# 添加对"扩展属性"的支持。 也有例外,但对我来说,直觉上我希望一个属性只是为我提供有关某物状态的信息(希望在 Oded 提到的O(1)时间内),而我希望一种方法"做某事"并对对象的状态产生某种副作用。

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

你可以写下扩展方法

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

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

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

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

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

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