Click to Rate and Give Feedback
MSDN
MSDN Library
.NET Development
Previous Versions
.NET Framework 2.0
Collapse All/Expand All Collapse All
This page is specific to
Microsoft Visual Studio 2005/.NET Framework 2.0

Other versions are also available for the following:

Want more? Here are some additional resources on this topic:

IEnumerable Generic Interface
Exposes the enumerator, which supports a simple iteration over a collection of a specified type.

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

Visual Basic (Declaration)
Public Interface IEnumerable(Of T)
    Inherits IEnumerable
Visual Basic (Usage)
Dim instance As IEnumerable(Of T)
C#
public interface IEnumerable<T> : IEnumerable
C++
generic<typename T>
public interface class IEnumerable : IEnumerable
J#
J# supports the use of generic types and methods, but not the declaration of new ones.
JScript
JScript does not support generic types and methods.
XAML
Not applicable.

Type Parameters

T

The type of objects to enumerate.

Notes to Implementers: IEnumerable must be implemented to support the foreach semantics of the C# language (for each in C++, For Each in Visual Basic). COM classes that allow enumerators also implement this interface.

Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0, 2.0

.NET Compact Framework

Supported in: 2.0

XNA Framework

Supported in: 1.0
Tags What's this?: Add a tag
Community Content   What is Community Content?
Add new content RSS  Annotations
Code Example for implementing IEnumerable generic interface      Dwellingbrook   |   Edit   |   Show History

The generic version of IEnumerable provides a way to make enumeration type-safe. Type mis-matches will show up at compile time rather than run time. Here is a code example.

using System;
using System.Collections;
using System.Collections.Generic;
public class Person
{
  public Person(string fName, string lName)
  {
    this.firstName = fName;
    this.lastName = lname;
  }
  public string firstName;
  public string lastName;
}
//
//Make the class People enumerable on Person
//
public class People : IEnumerable<Person>
{
  private Person[] people;
  public People(Person[] pArray)
  {
    people = new Person[pArray.length];
    for (int i = 0; i < pArray.length; i++)
    {
      people[i] = pArray[i];
    }
  }
  //Implement GetEnumerator for IEnumerable<Person>
  //This implementation works when the variable that holds 
  //the required values is enumerable
  public IEnumerator<Person> GetEnumerator()
  {
    foreach (Person p in people)
    {
      yeild return p;
    }
  }
  //Implement GetEnumerator for the IEnumerable interface that is
  //implied by IEnumerable<Person>.  
  //Use explicit implementation.
  IEnumerator IEnumerable.GetEnumerator()
  {
    foreach (Person p in people)
    {
      yeild return p;
    }
  }
}
Updated source code      michaelBao   |   Edit   |   Show History

public class Person

{

public Person(string fName, string lName)

{

this.firstName = fName;

this.lastName = lName;

}

public string firstName;

public string lastName;

}

//

//Make the class People enumerable on Person

//

publicclassPeople : IEnumerable<Person>

{

private Person[] people;

public People(Person[] pArray)

{

people =

newPerson[pArray.Length];

for (int i = 0; i < pArray.Length; i++)

{

people[i] = pArray[i];

}

}

//Implement GetEnumerator for IEnumerable<Person>

//This implementation works when the variable that holds

//the required values is enumerable

public IEnumerator<Person> GetEnumerator()

{

foreach (Person p in people)

{

yieldreturn p;

}

}

#region

IEnumerable Members

IEnumerator IEnumerable.GetEnumerator()

{

foreach (Person p in people)

{

yieldreturn p;

}

}

#endregion

}

Processing
© 2009 Microsoft Corporation. All rights reserved. Terms of Use | Trademarks | Privacy Statement | Site Feedback
Page view tracker