gpt4 book ai didi

c# - 为什么以下不起作用? (IEnumerable/IEnumerator)

转载 作者:行者123 更新时间:2023-11-30 13:46:49 26 4
gpt4 key购买 nike

我正在尝试这个 MSDN page 上的例子.我试图更改 GetEnumerator 方法。我知道那似乎有些不对劲,但它符合要求然后就不会运行。错误是枚举器尚未启动,应该调用 MoveNext,但 它正在 被调用!

class Program
{
static void Main(string[] args)
{
foreach (var day in new DaysOfTheWekk())
{
Console.WriteLine(day) ;
}
Console.ReadLine();
}
}

public class DaysOfTheWekk: IEnumerable
{
private string[] days = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

public IEnumerator GetEnumerator()
{
days.GetEnumerator().MoveNext();
yield return days.GetEnumerator().Current;
}
}

最佳答案

为什么要调用moveNext?只需省略 .Current:

public class DaysOfTheWeek: IEnumerable
{
private string[] days = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

public IEnumerator GetEnumerator()
{
return days.GetEnumerator();
}
}

否则使用 while 循环,因为:

public class DaysOfTheWeek: IEnumerable
{
private string[] days = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

public IEnumerator GetEnumerator()
{
var enumerator = days.GetEnumerator();
while(enumerator.MoveNext())
{
yield return enumerator.Current;
}
}
}

说明:GetEnumerator() 方法总是返回一个新的枚举器,因此如果调用 GetEnumerator().Current,则 MoveNext() 函数尚未在新返回的实例上调用!请改用我的第二个示例中所述的变量。

关于c# - 为什么以下不起作用? (IEnumerable/IEnumerator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19536495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com