在枚举枚举之前调用.Any()方法是否有任何好处?例如(准许该列表是IEnumerable):在枚举枚举之前通过IEnumberable调用Any()的好处是什么?
if(list != null && list.Any())
{
foreach(var item in list)
{
// do stuff
}
}
我怀疑它没有,但我宁愿确定。
在枚举枚举之前调用.Any()方法是否有任何好处?例如(准许该列表是IEnumerable):在枚举枚举之前通过IEnumberable调用Any()的好处是什么?
if(list != null && list.Any())
{
foreach(var item in list)
{
// do stuff
}
}
我怀疑它没有,但我宁愿确定。
没有真正的好处,但在这里调用Any
可能有缺点,因为您可能会枚举两次。
空检查应该足够了。该foreach将照顾其余的你。
其实,如果我没有记错,.Any()只会对.MoveNext()进行一次调用,所以是的,它会被枚举,但不是整个枚举。 – 2013-02-10 16:10:41
@SebastienF它取决于提供者。所以这是一个潜在的缺点。 – manojlds 2013-02-10 16:13:29
不,不是真的。如果列表为空,则您的foreach循环将不会迭代。
if(list != null)
{
foreach(var item in list)
{
// do stuff
}
}
不,没有真正的好处。
如果列表不为null,但为空,则foreach将会正常(即它不会抛出异常并且不会枚举空列表)。 做空检查应该足够了。
@DavidL这假定它实现'ICollection'而不只是'IEnumerable' – CodesInChaos 2013-02-10 15:49:20
你会期待什么好处?性能优势? – 2013-02-10 15:49:35
它实际上有一个缺点:'list'被枚举两次。你应该避免使用'IEnumerable',因为并不是所有的人都支持这一点。 –
CodesInChaos
2013-02-10 15:50:13