学习迭代的过程中( IEnumerable)遇到了一个奇怪的问题。

blackgull 2014-06-23 07:39:03
msdn 的解释(来自 yield c# 参考):

技术实现
以下代码从迭代器方法返回 IEnumerable<string>,然后遍历其元素。
C#
IEnumerable<string> elements = MyIteratorMethod();
foreach (string element in elements)
{

}

调用 MyIteratorMethod 并不执行该方法的主体。 相反,该调用会将 IEnumerable<string> 返回到 elements 变量中。
在 foreach 循环迭代时,将为 elements 调用 MoveNext 方法。 此调用将执行 MyIteratorMethod 的主体,直至到达下一个 yield return 语句。 yield return 语句返回的表达式不仅决定了循环体使用的 element 变量值,还决定了元素的 Current 属性(它是 IEnumerable<string>)。

于是,我用实例代码实现了一遍,如下:
        static void Main(string[] args)
{
// Display powers of 2 up to the exponent of 8:
IEnumerable elements = Power(2, 8);
foreach (var i in elements)
{
Console.Write("{0} ", i);
IEnumerator element = elements.GetEnumerator();
Console.Write(element.Current);
}

Console.ReadKey();
}

public static IEnumerable Power(int number, int exponent)
{
int result = 1;

for (int i = 0; i < exponent; i++)
{
result = result * number;
yield return result;
}
}


问题来了,为什么element.Current 显示为null ?
...全文
71 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2014-06-23
  • 打赏
  • 举报
回复
或者 IEnumerable elements = Power(2, 8); foreach (var i in elements) { Console.Write("{0} ", i); }
threenewbee 2014-06-23
  • 打赏
  • 举报
回复
foreach (var i in elements) { Console.Write("{0} ", i); IEnumerator element = elements.GetEnumerator(); Console.Write(element.Current); } -> IEnumerable elements = Power(2, 8); IEnumerator itor = elements.GetEnumerator(); while (itor.MoveNext()) { Console.Write(itor.Current); }

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧