In. NET, to be traversed by foreach, the target object implements the IEnumerable or Ienumerable<t> interface, which has a method, GetEnumerator (), returns a IEnumerator interface, This interface defines methods such as next (), such as:
Public class garge:ienumerable{ public IEnumerator getenumerator { return New A (); } Internal class A:ienumerator { // implement Next () etc }}
View Code
If foreach only needs to implement the IEnumerator interface, then our class must implement its own methods in the interface, so the common set is also implemented, then our custom class to implement can use foreach traversal, we must inherit those common collection objects, Or in the method where we implement the IEnumerator interface, the corresponding method of the collection is called. As you can see, if you set up. NET, it can be a great headache for people.
And like. NET is designed today, because commonly used collection objects, usually implement the IEnumerable interface, we want to implement in our custom class can be traversed with foreach, only need to invoke the GetEnumerator () method of the collection object.
Why is foreach implementing the IEnumerable interface instead of using the IEnumerator interface directly