我正在学习实现接口和泛型,我制作了这段代码,但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)
您正在实现IEnumerable<Vehicle>
一个强类型的通用接口来保存Vehicle
对象.但是,该接口来自较旧的IEnumerable
interace,它不是通用的,并且被键入以保存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)