C#项未添加到List <string>

时间:2018-06-13 08:19:02

标签: c# list data-structures interface

以下是我对Azure的ICollector接口的实现。

class TestCollector<T> : ICollector<T>
{
    public List<T> Collector => new List<T>();

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

在TestCollector上添加项目时, 收集者的数量仍为0。

没有添加的原因是什么? 我应该为TestCollector创建一个单独的构造函数并在里面初始化Collector吗?

2 个答案:

答案 0 :(得分:7)

以下是错误的

public List<T> Collector => new List<T>();    

箭头函数是方法的简写语法。你所写的内容相当于以下内容:

public List<T> Collector()
{
    return new List<T>();
}

因此,每次调用收集器时,都会返回一个新列表,向其中添加一个项目,然后不再引用该列表。

如果您需要字段,请将其替换为:

public List<T> Collector = new List<T>();    

编辑: 我错过了你需要Collector方法来实现你的界面的事实。在这种情况下,在字段中初始化列表可能是有意义的,然后在您的Collector实现中将其返回,如下所示:

class TestCollector<T> : ICollector<T>
{
    private List<T> Collector _collector = new List<T>();
    public List<T> Collector => _collector;

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

答案 1 :(得分:5)

您每次都在创建一个新列表

不要这样做

public List<T> Collector => new List<T>();

这样做

public List<T> Collector = new List<T>();

public List<T> Collector { get; } = new List<T>();