【问题标题】:Is there a more elegant way to find out if a list has elements than to use count?有没有比使用计数更优雅的方法来确定列表是否包含元素?
【发布时间】:2012-04-11 14:13:58
【问题描述】:

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

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

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

【问题讨论】:

  • 你为什么不认为这是一个优雅的解决方案?
  • 再看一遍,这是一个非常好的问题。我想我只是整天看代码的笨蛋。
  • 两种解决方案都很好。我认为 Any() 更具可读性。
  • @ChrisKooken - 不要忘记Any() 意味着您必须参考LINQ...并非总是可行或最佳的。

标签: c# list


【解决方案1】:

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

它也是描述性的。

【讨论】:

  • 准确来说Any()在这方面是完全一样的。它检查 IEnumerable 是否为 IList,如果是,则返回 Count != 0。
  • @Shedal - 对于IList,是的,尽管需要额外的步骤来检查类型。
  • 你是对的。我想我只是在寻找像 list.hasItems 这样明显不存在的属性。
【解决方案2】:

你可以使用 linq:

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

【讨论】:

  • 很高兴知道!谢谢你。但我认为我会坚持使用 count > 0,因为它没有调用另一个函数。
【解决方案3】:

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

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

然后你会这样使用它:

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

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

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

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

【讨论】:

    【解决方案4】:

    你可以编写如下扩展方法

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

    查看这个问题了解更多信息 - Checking if a list is empty with LINQ

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-25
          • 2013-03-21
          • 1970-01-01
          • 1970-01-01
          • 2022-08-10
          • 2019-11-26
          • 2015-05-03
          • 2015-10-10
          相关资源
          最近更新 更多