我以前从未做过收藏。我试图在互联网上找到解决方案,以及他们必须添加的内容才能使界面正常工作。
我添加了我在网上能找到的所有内容。
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;
...
我显然不能将所有内容都放在示例代码中,但在其余代码中只有继承的函数或方法。
一切都没有后顾之忧,除了我注意到当我完成填充我的收藏时,在ICollection.Count和IList.this [int index]中有一个循环。
object IList.this[int index]
{
get
{
return this[index];
}
set
{
this.CheckIndex(index);
try
{
this[index] = (RecipeObject)((object)value);
return;
}
catch (InvalidCastException) { }
catch (NullReferenceException) { }
throw new ArgumentException();
}
}
int ICollection.Count
{
get
{
return this.Count;
}
}
在调试模式下,我没有找出这个循环启动的原因以及它如何或是否一次停止。尽管有这个循环,我的程序运行良好。即使我怀疑,我也不知道这是否正常。
如果缺少可以给出答案或至少提供线索的内容,我可以添加代码或其他任何内容。
虽然我确实觉得没有足够的信息来给出具体的答案,但我猜你可能在这个问题中将无限递归称为循环。
如果是这样,如果对象 IList.this[int index] setter方法中的以下行,我不会感到惊讶:
this[index] = (RecipeObject)((object)value);
将无限递归地再次调用对象 IList.this[int index] setter方法,直到达到最大递归深度。
难道你打算做类似的事情
this.collection[index] = (RecipeObject)((object)value);"
在那一行?
你不需要实现所有的方法。 如果你想使用一个集合,你可以像这样声明它。
public class RecipeObjectCollection: List<RecipeObject>
{
//......
}
public class RecipeObject
{
//......
}
然后,您可以利用 List 对象上的现有方法。 无需实现额外方法的额外麻烦。您解释的奇怪行为可能是实现其中一种方法的结果。