![](/img/trans.png)
[英]Is there a more elegant way to act on the first and last items in a foreach enumeration than 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.