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年前的问题-“我只想知道为什么这个问题的答案。”你只是在重复问题中已经说过的事情。