IEnumerable<T>::GetEnumerator Method

Returns an enumerator that iterates through the collection.

Namespace:  System.Collections.Generic
Assembly:  mscorlib (in mscorlib.dll)

IEnumerator<T>^ GetEnumerator()

Return Value

Type: System.Collections.Generic::IEnumerator<T>
An enumerator that can be used to iterate through the collection.

The returned IEnumerator<T> provides the ability to iterate through the collection by exposing a Current property .You can use enumerators to read the data in a collection, but not to modify the collection.

Initially, the enumerator is positioned before the first element in the collection. At this position, Current is undefined. Therefore, you must call the MoveNext method to advance the enumerator to the first element of the collection before reading the value of Current.

Current returns the same object until MoveNext is called again as MoveNext sets Current to the next element.

If MoveNext passes the end of the collection, the enumerator is positioned after the last element in the collection and MoveNext returns false. When the enumerator is at this position, subsequent calls to MoveNext also return false. If the last call to MoveNext returned false, Current is undefined. You cannot set Current to the first element of the collection again; you must create a new enumerator instance instead.

An enumerator does not have exclusive access to the collection so an enumerator remains valid as long as the collection remains unchanged. If changes are made to the collection, such as adding, modifying, or deleting elements, the enumerator is invalidated and you may get unexpected results when a. Also, enumerating a collection is not a thread-safe procedure. To guarantee thread-safety, you should lock the collection during enumerator or implement synchronization on the collection.

Default implementations of collections in the System.Collections.Generic namespace aren't synchronized.

The following example demonstrates how to implement the IEnumerable<T> interface and uses that implementation to create a LINQ query. When you implement IEnumerable<T>, you must also implement IEnumerator<T> or, for C# only, you can use the yield (C# Reference) keyword. Implementing IEnumerator<T> also requires IDisposable to be implemented, which you will see in this example.

No code example is currently available or this language may not be supported.

For another C# example that demonstrates how to implement the IEnumerable<T> interface, see the Generics Sample. This sample uses of the yield keyword instead of implementing IEnumerator<T>.

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0, 2.0, 1.0

Portable Class Library

Supported in: Portable Class Library

Supported in: Windows Phone 8.1

Supported in: Windows Phone Silverlight 8.1

Supported in: Windows Phone Silverlight 8
Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2015 Microsoft