有没有比使用计数更优雅的方式来找出列表是否有元素
本文关键字:方式 列表 元素 是否 有没有 | 更新日期: 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()