IEnumerable的GetEnumerator()的替代实现包装
本文关键字:实现 包装 GetEnumerator IEnumerable | 更新日期: 2023-09-27 18:02:56
我正在为IEnumerable<T>
实现一个包装器类,就像我通常做的那样,我注意到ReSharper建议我将GetEnumerator
方法中的foreach
循环转换为linq表达式。
出于好奇,我点击了"转换为linq表达式",然后将我的方法从:
public IEnumerator<T> GetEnumerator()
{
foreach (var item in _someList)
{
yield return item;
}
}
进入ReSharper的"LINQ-expression"结果:
public IEnumerator<T> GetEnumerator()
{
return ((IEnumerable<T>) _someList).GetEnumerator();
}
代码是相当直接的:而不是循环通过_someList
那里,它是铸造_someList
作为IEnumerable<T>
,然后使用任何现有的GetEnumerator()
方法他们是返回相同的结果。
我以前没有见过这个实现,我想知道在你真的没有任何自定义放入Enumerator的情况下使用它是否有任何危险。我也想知道使用一种实现是否有任何好处。
如果您的非泛型GetEnumerator
已经完美地工作(除了非泛型),那么没有理由不使用它。在这种情况下,您只需要将其强制转换为IEnumerable<T>
。
如果没有,那么您需要使用自己的yield
语句,因为您已经知道如何使用。