在继承自IEnumerable的泛型类中实现Add方法
本文关键字:实现 Add 方法 泛型类 继承 IEnumerable | 更新日期: 2023-09-27 17:50:20
类如下
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'不包含'Add'的定义错误。
我很困惑,我该如何添加这个项目?
当然可以。
public void Add(T item)
{
this.Add(item);
}
这里你有一个方法调用它自己,它再调用它自己,它再调用它自己,直到你的堆栈用完。
您可能想要添加一个List<T>
类型的字段,并让您的Add
方法调用_list.Add(item);
。或者将新条目写入磁盘,或者将其存储在您想要的任何地方——但列表将是最常见的存储位置。