我正在为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的情况下使用它是否有任何危险。我也想知道使用一个实现是否有任何好处。
答案 0 :(得分:3)
如果您的非通用 for($number=1;$number<=$messageCount;$number++)
{
echo '<a href="?page=' .$number. '">' .$number. ' </a>';
}
//echo "<br> Current Page: $page";
已经完美运行(非通用除外),那么不就没有理由使用它。在这种情况下,您只需要转换为GetEnumerator
。
如果没有,那么您需要使用IEnumerable<T>
语句自行推送,因为您已经知道如何。