簡體   English   中英

有沒有一種更優雅的方式來查找列表是否包含元素而不是使用count?

[英]Is there a more elegant way to find out if a list has elements than to use count?

目前,我使用以下過程來確定列表中是否包含元素:

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

我問自己是否有一種更優雅的方法來找出是否存在元素,而無需進行比較。

您可以使用linq:

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

Count是最好的選擇-它是List<>的屬性,表示訪問時間為O(1)

它也是描述性的。

我想如果這句話使您感到困擾,並且您想要一種更具表現力的方式來描述它,則可以編寫一個自定義擴展方法:

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

然后,您將像這樣使用它:

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

確實,這是個人喜好問題。 例如,術語HasItems聽起來比Count > 0更為直觀,甚至看起來更簡潔(再次主觀)。

但是,我個人不喜歡它是方法而不是屬性。 (如果C#添加了對“擴展屬性”的支持,我個人會很喜歡 。)有一些例外,但是對我而言,我直覺地希望一個屬性僅能提供某些狀態的信息(希望在O(1)時間內, 如Oded所提到的 ) ,而我希望一種方法能夠“做某事”並對對象的狀態產生某種副作用。

同樣,這都是個人喜好問題。 只是您可以使用的一個選項。

您可以編寫擴展方法如下

    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() 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM