我正在学习实现接口和泛型,我制作了这段代码,但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; };
}
}
}
答案 0 :(得分:7)
您正在实施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();
}
答案 1 :(得分:1)
你为什么不这样做,你的生活将会很好。
class VehicleLot : List<Vehicle>
{
}
现在 VehicleLot 是你的集合类。您可以像对待任何其他集合一样执行任何操作。
用法:
VehicleLot list = new VehicleLot();
list.Add(new Vehicle()); // you can add as many Vehicles as you want
答案 2 :(得分:1)
通常情况下,当您的类本身不实现IEnumerable时会更好。您可以创建一个属性并将列表作为IEnumerable返回:
namespace Generic_cars
{
class VehicleLot
{
public List<Vehicle> Lot = new List<Vehicle>();
IEnumerable<Vehicle> Vehicles
{
return Lot;
}
}
}