c# - IEnumerable,需要两个实现?

标签 c# interface

我正在学习如何实现接口(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/

相关文章:

java - 依赖项更改时强制类重新编译

c# - .Net 的 Blackmagic Decklink 接口(interface)

c# - RichTextBox c# Windows 窗体中的输出控制台

c# - 缺少 ClickOnce Url 参数

c# - 如何从接口(interface)引用实现类?

vb.net - 如何在 VB.NET 中使用过时的方法实现接口(interface)而不抑制警告?

C# Generics - 根据对象类型找到正确的具体类

c# - 将方法应用于类的成员

c# - IIS 进程外长时间运行的存储过程

c# - OnTriggerEnter 不适用于 Unity3D