C# 为什么在填充我的自定义集合后,ICollection.Count中会出现循环

C# 为什么在填充我的自定义集合后,ICollection.Count中会出现循环,c#,list,enumerator,icollection,C#,List,Enumerator,Icollection,我以前从未收集过。我试图在互联网上找到解决方案,同时也利用他们为界面工作所必须添加的内容 我添加了我在网上能找到的所有东西 public class RecipeObjectCollection : ICollection<RecipeObject>, IList<RecipeObject>, IEnumerable<RecipeObject>, IEnumerable, IList, ICollection { public struct Enume

我以前从未收集过。我试图在互联网上找到解决方案,同时也利用他们为界面工作所必须添加的内容

我添加了我在网上能找到的所有东西

public class RecipeObjectCollection : ICollection<RecipeObject>, IList<RecipeObject>, IEnumerable<RecipeObject>, IEnumerable, IList, ICollection
{
    public struct Enumerator : IEnumerator<RecipeObject>, IDisposable, IEnumerator
    {
        private RecipeObjectCollection collection;

        private RecipeObject current;

        private int next;

        private readonly int version;

        public RecipeObject Current => this.current;

...
在调试模式下,我没有找到这个循环为什么启动,以及如何启动,或者是否一次停止。尽管有这种循环,我的程序运行得很好。即使我怀疑,我也不知道这是否正常


我可以添加代码或其他任何东西,如果它缺少可以给出答案或至少是线索的东西。

您不需要实现所有方法。如果要使用集合,可以这样声明它

public class  RecipeObjectCollection: List<RecipeObject>
{
    //......
}

public class RecipeObject
{
    //......
}

然后可以利用列表对象上的现有方法。没有实现额外方法的额外麻烦。您所解释的奇怪行为可能是实现其中一种方法的结果

虽然我确实觉得没有足够的信息来给出具体的答案,但我猜您可能在这个问题中将无限递归称为循环

如果是这样,如果对象中的以下行是IList.this[int index]setter方法,我不会感到惊讶:

将调用对象IList。此[int index]setter方法将无限次递归地再次调用,直到达到最大递归深度

你是否打算做类似的事情

this.collection[index] = (RecipeObject)((object)value);"

而是在那一行?

循环意味着什么?你在哪里观察到这个循环?你能把代码也展示出来吗?我从来没有在一个类声明中看到过这么多接口。请注意,IList已经继承了ICollection和IEnumerable。您是否将该类作为学习练习来实现?如果不是的话,你可能应该看看使用。你在这里说的是什么真的很不清楚。请为你的问题创建一个解决方案捕获异常并扔掉有价值的异常信息是一个非常糟糕的主意,IMO。你永远不会明白它为什么会失败。你能解释一下这是如何回答这个问题的吗?它似乎只是一些完全无关的代码。这甚至不是一个集合,这是一个列表,它们不是同一件事…@Liam从技术上讲不是一个列表一个特定的集合公共接口IList:ICollection,按定义IEnumerable?但我承认List==Collection是错误的,没有显示递归。这两个方法都是调用重载的,但没有显示。显式接口实现都是在一个类型上调用方法,而该类型不是它们正在实现的接口。
this[index] = (RecipeObject)((object)value);
this.collection[index] = (RecipeObject)((object)value);"