在继承自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'的定义错误。

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

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

当然可以。

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

这里你有一个方法调用它自己,它再调用它自己,它再调用它自己,直到你的堆栈用完。

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