IEnumerable,需要两个实现?

Rea*_*ion 7 c# interface

我正在学习实现接口和泛型,我制作了这段代码,但VStudio说我没有实现System.Collections.Enumerable.GetEnumerator().我一般不会在下面这样做吗?它想要两个实现?

namespace Generic_cars
{
 class VehicleLot:IEnumerable<Vehicle>
 {
    public List<Vehicle> Lot = new List<Vehicle>();

    IEnumerator<Vehicle> IEnumerable<Vehicle>.GetEnumerator()
    {
        foreach (Vehicle v in Lot) { yield return v; };
    }
 }
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*eld 7

您正在实现IEnumerable<Vehicle>一个强类型的通用接口来保存Vehicle对象.但是,该接口来自较旧的IEnumerableinterace,它不是通用的,并且被键入以保存object对象.

如果要实现通用版本(您执行此操作),则还需要实现非通用版本.通常,您GetEnumerator只需调用泛型版即可实现非泛型.

此外,您可能希望明确地实现GetEnumerator<Vehicle>您的方式; 这将要求您显式转换对象IEnumerable<Vehicle>以便使用它们.相反,您可能想要这样做:

public IEnumerator<Vehicle> GetEnumerator() {
    foreach( Vehicle item in items ) {
        yield return item;
    }
}

IEnumerator IEnumerable.GetEnumerator() {
    return GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)