在枚舉枚舉之前調用.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