C#中,使用foreach循环遍历访问的对象需要实现IEnumerable接口或者声明GetEnumerator方法的类型。

  • 实现IEnumerable接口:IEnumerable接口定义了一个GetEnumerator方法,该方法返回一个实现了IEnumerator接口的对象。通过实现IEnumerable接口,可以使对象能够被foreach循环遍历访问。

示例代码如下:

public class MyCollection : IEnumerable
{
    private int[] data = { 1, 2, 3, 4, 5 };

    public IEnumerator GetEnumerator()
    {
        return data.GetEnumerator();
    }
}

// 使用foreach循环遍历访问MyCollection对象
MyCollection collection = new MyCollection();
foreach (int item in collection)
{
    Console.WriteLine(item);
}
  • 声明GetEnumerator方法:如果一个类型没有实现IEnumerable接口,但是声明了GetEnumerator方法,该方法返回一个实现了IEnumerator接口的对象,同样可以使对象能够被foreach循环遍历访问。

示例代码如下:

public class MyCollection
{
    private int[] data = { 1, 2, 3, 4, 5 };

    public IEnumerator GetEnumerator()
    {
        return new MyEnumerator(data);
    }
}

public class MyEnumerator : IEnumerator
{
    private int[] data;
    private int position = -1;

    public MyEnumerator(int[] data)
    {
        this.data = data;
    }

    public object Current => data[position];

    public bool MoveNext()
    {
        position++;
        return position < data.Length;
    }

    public void Reset()
    {
        position = -1;
    }
}

// 使用foreach循环遍历访问MyCollection对象
MyCollection collection = new MyCollection();
foreach (int item in collection)
{
    Console.WriteLine(item);
}
06-25 12:07