有关IEnumerable.GetEnumerator()的错误消息

Bon*_*han 8 c# ienumerable

我收到此错误消息,我无法弄清楚原因!

Error   1   'Exo5Chap12.ShortCollection<T>' does not implement interface member 
'System.Collections.IEnumerable.GetEnumerator()'. 
'Exo5Chap12.ShortCollection<T>.GetEnumerator()' cannot implement 
'System.Collections.IEnumerable.GetEnumerator()' because it does not have the matching 
return type of 'System.Collections.IEnumerator'.    
E:\MyFolders\Dev\c#\Chapter12\Exo5Chap12\Exo5Chap12\exo5.cs 9   18  Exo5Chap12
Run Code Online (Sandbox Code Playgroud)

以下是具有GetEnumerator()实现的代码.怎么了?

 public class ShortCollection<T> : IList<T>
{
    protected Collection<T> innerCollection;
    protected int maxSize = 10;
    public IEnumerator<T> GetEnumerator()
    {
        return (innerCollection as IEnumerator<T>).GetEnumerator();
    }
}
Run Code Online (Sandbox Code Playgroud)

Don*_*nie 12

正如其他人所说,你需要实施IEnumerable以及IEnumerable<T>.但是,由于IEnumberable<T>自己实现IEnumerable这是微不足道的,只需调用你的泛型GetEnumerator():

public class ShortCollection<T> : IList<T>
{
    protected Collection<T> innerCollection;
    protected int maxSize = 10;
    public IEnumerator<T> GetEnumerator()
    {
        return innerCollection.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
         return GetEnumerator();
    }
}
Run Code Online (Sandbox Code Playgroud)

我假设您有实际添加和删除的方法,innerCollection为了简洁而将它们排除在外,因为它们与手头的问题无关.


Ach*_*him 4

IEnumerableIEnumerable<T>是不同的接口,您的代码必须同时实现这两个接口。您的代码仅实现了 GetEnumerator() IEnumerable<T>,但没有实现 GetEnumerator() IEnumerable。您应该考虑安装 ReSharper,它可以轻松修复此类错误。