目前我使用以下程序来确定列表是否包含元素:
if (aList.Count > 0)
{
//doStuff
}
我问自己是否有更优雅的方法来查明是否有元素,而不使用比较。
答案 0 :(得分:8)
您可以使用linq:
if (aList.Any())
{
//doStuff
}
答案 1 :(得分:8)
Count
是最佳选择 - 它是List<>
的属性,意味着访问时间为O(1)
。
它也是描述性的。
答案 2 :(得分:2)
我想如果这是困扰你的措辞,你想要一种更具表现力的方式来描述它,你可以写一个自定义的扩展方法:
public static bool HasItems(this IList<T> list)
{
return list.Count > 0;
}
然后你会像这样使用它:
if (aList.HasItems())
{
//doStuff
}
这是个人偏好的问题,真的。例如,术语HasItems
可能听起来比Count > 0
更直观,甚至可能看起来更清晰(再次,主观)。
然而,我个人不喜欢的是它是一种方法而不是财产。 (如果C#添加了对“扩展属性”的支持,我个人会喜欢。)有例外,但对我来说,直觉上我希望某个属性能够给我一些关于某事物状态的信息(希望在{{ 1}} time as Oded mentions),而我期望一种方法“做某事”并对对象的状态产生某种副作用。
同样,这完全取决于个人偏好。只是一个可供选择的选项。
答案 3 :(得分:1)
您可以编写扩展方法,如下所示
public static Boolean IsEmpty<T>(this IEnumerable<T> sourceList)
{
return (sourceList==null) ? true : !sourceList.Any();
}
请参阅此问题以获取更多信息 - Checking if a list is empty with LINQ
答案 4 :(得分:0)
这已经是最优雅的解决方案。
可以使用(只是一个示例)Count(x=>x..condition..);
linq类型来查找满足某些指定条件的元素的数量。
答案 5 :(得分:0)
我把这张支票包裹在一个扩展名中(Null检查和检查项目是非常麻烦的)
public static bool IsAny<T>(this IEnumerable<T> item)
{
return item != null && item.Any();
}
// Usage
listOfFoo.IsAny()