在继承自IEnumerable的泛型类中实现Add方法

时间:2014-03-15 13:41:38

标签: c# oop generics inheritance ienumerable

让课程如下

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'不包含“添加” 错误的定义。

我很困惑,我应该如何添加项目?

1 个答案:

答案 0 :(得分:1)

嗯,当然。

public void Add(T item)
{
    this.Add(item);
}

这里有一个调用自身的方法,它自己调用自身,然后调用自身,直到你的堆栈用完为止。

您可能希望添加List<T>类型的字段,并使用Add方法调用_list.Add(item);。或者将新项目写入磁盘,或将其存储在您想要的任何其他位置 - 但列表将是存储它的最常见位置。