Как реализовать IEnumerable <T> с помощью GetEnumerator()?
Я бы хотел, чтобы мой тип реализовал IEnumerable<string>
. Я попытался следовать С# в двух словах, но что-то пошло не так:
public class Simulation : IEnumerable<string>
{
private IEnumerable<string> Events()
{
yield return "a";
yield return "b";
}
public IEnumerator<string> GetEnumerator()
{
return Events().GetEnumerator();
}
}
Но я получаю ошибку сборки
Ошибка 1 'EventSimulator.Simulation' не реализует член интерфейса 'System.Collections.IEnumerable.GetEnumerator()'. "EventSimulator.Simulation.GetEnumerator() не может реализовать" System.Collections.IEnumerable.GetEnumerator() ", потому что у него нет соответствующего типа возврата" System.Collections.IEnumerator ".
Ответы
Ответ 1
Вам не хватает IEnumerator IEnumerable.GetEnumerator()
:
public class Simulation : IEnumerable<string>
{
private IEnumerable<string> Events()
{
yield return "a";
yield return "b";
}
public IEnumerator<string> GetEnumerator()
{
return Events().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Ответ 2
IEnumerable требует, чтобы вы реализовали как типизированный, так и общий метод.
В разделе сообщества msdn docs объясняется, почему вам нужны оба. (Для обратной совместимости это причина, по существу).