继承 IEnumerable<string> 导致错误 CS0738

Inheriting IEnumerable<string> cause error CS0738

public class PatchInfo : IEnumerable<string>
{
    ...
    public IEnumerator<string> GetEnumerator()
    {
        LinkedList<string> list = new LinkedList<string>();
        ...
        return list;
    }
}

接口名称是 "IEnumerable" 所以我想 return 类型 "IEnumerator" 可能会更正。

但是会导致编译错误

CS0738 : ... does not implement interface member... because it does not have the matching return type of 'System.Collections.IEnumerator'.

怎么了?

IEnumarable 继承IEnumarable。所以你还需要实现 IEnumerator IEnumerable.GetEnumerator() 方法。

IEnumerator IEnumerable.GetEnumerator()
{
    return GetEnumerator();
}

此外,您的代码不会编译,因为 GetEnumerator 方法应该 return IEnumerator 而不是 IEnumarable。使用 GetEnumarator 方法获取 IEnumerator.

public class TestEnumarable : IEnumerable<string>
{
    public IEnumerator<string> GetEnumerator()
    {
       LinkedList<string> a = new LinkedList<string>();

       return a.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}