让课程如下
public class MyGeneric<T> : IEnumerable
{
public System.Collections.IEnumerator GetEnumerator()
{
return this.GetEnumerator();
}
public void Add(T item)
{
this.Add(item);
}
public IEnumerable<T> GetNullItems()
{
foreach (T item in this)
{
if (item != null)
{
yield return item;
}
}
}
}
当我实例化 MyGeneric 类型的对象并向其添加项目时,我得到System.StackOverflowException
MyGeneric<int?> mylist = new MyGeneric<int?>()
{
1,null,3,null,5,6,7,null,9,10
};
问题在于,当我添加 1 时会调用Add
方法,而在Add
方法内,代码段this.Add(item);
表示调用Add
再次,而我的意思是将项目添加到集合中。
如果我删除Add
方法,我会收到 'MyClass.MyGeneric'不包含“添加” 错误的定义。
我很困惑,我应该如何添加项目?
答案 0 :(得分:1)
嗯,当然。
public void Add(T item)
{
this.Add(item);
}
这里有一个调用自身的方法,它自己调用自身,然后调用自身,直到你的堆栈用完为止。
您可能希望添加List<T>
类型的字段,并使用Add
方法调用_list.Add(item);
。或者将新项目写入磁盘,或将其存储在您想要的任何其他位置 - 但列表将是存储它的最常见位置。