IEnumerable <t> Wrapper的GetEnumerator()替代实现

时间:2015-07-15 15:48:05

标签: c# linq ienumerable ienumerator

我正在为IEnumerable<T>实现一个包装类,就像我通常那样,我注意到ReSharper建议我将foreach方法中的GetEnumerator循环转换为LINQ-表达。

出于好奇,我点击了“转换成LINQ表达式”,然后改变了我的方法:

public IEnumerator<T> GetEnumerator()
{
    foreach (var item in _someList)
    {
        yield return item;
    }
}

进入ReSharper的“LINQ表达式”结果:

public IEnumerator<T> GetEnumerator()
{
    return ((IEnumerable<T>) _someList).GetEnumerator();
}


代码非常简单:不是在_someList循环,而是将_someList转换为IEnumerable<T>,然后使用现有的GetEnumerator()方法返回相同的代码结果。

我之前没有见过这个实现,我想知道在你真的没有任何自定义放入Enumerator的情况下使用它是否有任何危险。我也想知道使用一个实现是否有任何好处。

1 个答案:

答案 0 :(得分:3)

如果您的非通用 for($number=1;$number<=$messageCount;$number++) { echo '<a href="?page=' .$number. '">' .$number. ' &nbsp;</a>'; } //echo "<br> Current Page: $page"; 已经完美运行(非通用除外),那么就没有理由使用它。在这种情况下,您只需要转换为GetEnumerator

如果没有,那么您需要使用IEnumerable<T>语句自行推送,因为您已经知道如何。