C# 为什么在实现IEnumerable时需要实现IEnumerator

C# 为什么在实现IEnumerable时需要实现IEnumerator,c#,.net,C#,.net,为什么在实现IEnumerable时需要实现IEnumerable。无论我在哪里读到它都只写它必须发生,但我只想知道为什么会发生的问题的答案。必须实现一个GetEnumerator()方法,该方法返回一个IEnumerator。为了返回一个IEnumerator,必须有一些实现供您返回。根据您的类,可以重用现有的IEnumerator实现,但也可能您的类有一种自定义的迭代方式,在这种情况下,您需要创建自己的接口实现 但是,有一种快捷语法可用。您可以在GetEnumerator()方法中使用yie

为什么在实现
IEnumerable
时需要实现
IEnumerable
。无论我在哪里读到它都只写它必须发生,但我只想知道为什么会发生的问题的答案。

必须实现一个
GetEnumerator()
方法,该方法返回一个
IEnumerator
。为了返回一个
IEnumerator
,必须有一些实现供您返回。根据您的类,可以重用现有的
IEnumerator
实现,但也可能您的类有一种自定义的迭代方式,在这种情况下,您需要创建自己的接口实现

但是,有一种快捷语法可用。您可以在
GetEnumerator()
方法中使用
yield return
关键字,让C#编译器根据您提供的内联代码为您创建IEnumerator实现。例如,集合类的

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

    public IEnumerator GetEnumerator()
    {
        for (int index = 0; index < days.Length; index++)
        {
            // Yield each day of the week. 
            yield return days[index];
        }
    }
}
公共类DaysOfTheWeek:IEnumerable
{
私人字符串[]天={“太阳”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”};
公共IEnumerator GetEnumerator()
{
对于(int index=0;index
在MICROSOFT文档中,它说“当您实现IEnumerable时,您还必须实现IEnumerator。”


否;你可以写一个迭代器。如果我有一个集合作为字段成员,那么我不需要实现IEnumerator,但是如果我想迭代我的类对象,那么我必须实现IEnumerator。这就是你想要回答的@StriplingWarrior。谢谢你的回答though@SumitRayakwar:如果希望迭代类,则必须存在IEnumerator的实现,但不一定要显式实现它。您可能能够重用其他类的IEnumerator(例如,本答案中的示例可以通过返回
days.GetEnumerator()轻松实现)
。或者,您可以使用C#迭代器功能来
生成返回
,从而避免创建自定义实现。您阅读的链接/位置有助于澄清问题。这如何回答OPs 4年前的问题-“我只想知道为什么这个问题的答案。”你只是在重复问题中已经说过的事情。