找出c#枚举器

use*_*862 3 c# ienumerable

我正在尝试使用以下示例来理解枚举器

public class Garage : IEnumerable
{
    private Car[] cars = new Car[4];
    public Garage()
    {
        cars[0] = new Car() { Id = Guid.NewGuid(), Name = "Mazda 3", CurrentSpeed = 90 };
        cars[1] = new Car() { Id = Guid.NewGuid(), Name = "Mazda 6", CurrentSpeed = 80 };
    }

    public IEnumerator GetEnumerator()
    {
        // return the array object's IEnumerator
        return cars.GetEnumerator();
    }
}

static void Main(string[] args)
    {
        IEnumerator i = cars.GetEnumerator();
        i.MoveNext();
        Car myCar = (Car)i.Current;
        Console.WriteLine("{0} is going {1} km/h", myCar.Name, myCar.CurrentSpeed);
        Console.ReadLine();

    }
Run Code Online (Sandbox Code Playgroud)

如何在没有使用foreach循环的情况下在控制台第二辆车上显示?

dtb*_*dtb 8

foreach (Car myCar in cars)
{
    Console.WriteLine("{0} is going {1} km/h", myCar.Name, myCar.CurrentSpeed);
}
Run Code Online (Sandbox Code Playgroud)

大约扩展到

IEnumerator i = cars.GetEnumerator();
while (i.MoveNext())
{
    Car myCar = (Car)i.Current;
    Console.WriteLine("{0} is going {1} km/h", myCar.Name, myCar.CurrentSpeed);
}
Run Code Online (Sandbox Code Playgroud)

(在现实中,扩大foreach由C#编译器执行的语句是一个比较复杂;见foreach语句).

  • 错过了`using` /`Dispose()`...非常重要,它通常被省略(错误) (4认同)