我正在学习如何实现接口(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; };
}
}
}
最佳答案
您正在实现 IEnumerable<Vehicle>
,一个强类型化的通用接口(interface)来保存 Vehicle
对象。然而,该接口(interface)源自旧的 IEnumerable
。非通用接口(interface),类型为保存 object
对象。
如果你想实现通用版本(你这样做),你还需要实现非通用版本。通常你会实现非通用的 GetEnumerator
通过简单地调用通用版本。
此外,您可能不想要显式实现 GetEnumerator<Vehicle>
你的样子;这将要求您将对象显式转换为 IEnumerable<Vehicle>
为了使用它们。相反,您可能想要这样做:
public IEnumerator<Vehicle> GetEnumerator() {
foreach( Vehicle item in items ) {
yield return item;
}
}
IEnumerator IEnumerable.GetEnumerator() {
return GetEnumerator();
}
关于c# - IEnumerable,需要两个实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12888543/