C # универсальный IEnumerable - PullRequest
       47

C # универсальный IEnumerable

0 голосов
/ 29 ноября 2018

Я изучаю шаблон итератора под капотом, так что в конце концов я смогу использовать его в некоторых классах.Вот тестовый класс:

public class MyGenericCollection : IEnumerable<int>
{
    private int[] _data = { 1, 2, 3 };

    public IEnumerator<int> GetEnumerator()
    {
        foreach (int i in _data)
        {
            yield return i;
        }
    }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

Я запутался в разделе IEnumerable.GetEnumerator().В тестах кода, которые я запускал, на него никогда не ссылались и не использовали, но мне нужно иметь его для реализации универсального IEnumerable.

. Я понимаю, что IEnumerable<T> наследуется от IEnumerator, поэтомучто я должен реализовать оба.

За пределами этого я запутался, когда когда-либо используется неуниверсальный интерфейс.В отладку это никогда не входило.Может ли кто-нибудь помочь мне понять?

1 Ответ

0 голосов
/ 29 ноября 2018

Я запутался в разделе IEnumerable.GetEnumerator ().В тестах кода, которые я выполнил, на него никогда не ссылаются и не используют, но я должен иметь его для реализации универсального IEnumerable.

Он будет использоваться всем, что использует ваш тип как простоIEnumerable.Например:

IEnumerable collection = new MyGenericCollection();
// This will call the GetEnumerator method in the non-generic interface
foreach (object value in collection)
{
    Console.WriteLine(value);
}

Существует только несколько методов LINQ, которые также будут вызывать его: Cast и OfType:

var castCollection = new MyGenericCollection().OfType<int>();
...