Why not use yield instead of List<T>.Enumerator

138 views Asked by At

I just find there's a nested struct named Enumerator within the List<> class.

// Returns an enumerator for this list with the given
// permission for removal of elements. If modifications made to the list 
// while an enumeration is in progress, the MoveNext and 
// GetObject methods of the enumerator will throw an exception.
//
public Enumerator GetEnumerator() {
    return new Enumerator(this);
}

[Serializable]
public struct Enumerator : IEnumerator<T>, System.Collections.IEnumerator
{
    private List<T> list;
    private int index;
    private int version;
    private T current;

    internal Enumerator(List<T> list) {
        this.list = list;
        index = 0;
        version = list._version;
        current = default(T);
    }

    //Omit other code
}

As I know the yield keyword will be translated to above nested struct in IL level, so why Microsoft not use yield directly?

0

There are 0 answers