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

标签 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

这是实现 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();
    }
}

最佳答案

正如其他人所说,您需要实现 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();
    }
}

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

关于c# - 有关 IEnumerable.GetEnumerator() 的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2981615/

相关文章:

c# - 中断使用 Enumerable.Range 的 IEnumerable<int> 查询

c# - 安全更新后处理对 System.Web.Mvc 的引用

c# - 不使用保存文件对话框保存文件

c# - 为什么 Queryable.SelectMany(...) 重载接受 Func<S, IEnumerable<R>> 而不是 Func<S, IQueryable<R>>?

c# - 迭代器变量在它来自的 IEnumerable 中不存在吗?

.net - 如何检查IEnumerable是否为列表?

c# - 在 IEnumerator.GetEnumerator() 中返回 IEnumerator<T>.GetEnumerator() 是否可以?

c# - RichTextBox 和插入符位置

c# - 扩展方法解析

c# - 可以将 F# 类型的提供程序合并到 C# 中吗