use*_*520 0 c# interface list data-structures
下面是我对Azure的ICollector接口的实现.
class TestCollector<T> : ICollector<T>
{
public List<T> Collector => new List<T>();
public void Add(T item)
{
Collector.Add(item);
}
}
Run Code Online (Sandbox Code Playgroud)
在TestCollector上添加项目时,收集器的计数仍保持为0.
它没有被添加的原因是什么?我应该为TestCollector创建一个单独的构造函数并在里面初始化Collector吗?
以下是错误的
public List<T> Collector => new List<T>();
Run Code Online (Sandbox Code Playgroud)
箭头函数是方法的简写语法.你写的内容相当于以下内容:
public List<T> Collector()
{
return new List<T>();
}
Run Code Online (Sandbox Code Playgroud)
因此,每次调用Collector时,都会返回一个新列表,向其中添加一个项目,然后不再引用该列表.
如果您需要一个字段,请将其替换为:
public List<T> Collector = new List<T>();
Run Code Online (Sandbox Code Playgroud)
编辑:我错过了你需要收集器方法来实现你的界面的事实.在这种情况下,初始化字段中的列表,然后在您的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);
}
}
Run Code Online (Sandbox Code Playgroud)
您每次都在创建一个新列表
不要这样做
public List<T> Collector => new List<T>();
Run Code Online (Sandbox Code Playgroud)
做这个
public List<T> Collector = new List<T>();
Run Code Online (Sandbox Code Playgroud)
要么
public List<T> Collector { get; } = new List<T>();
Run Code Online (Sandbox Code Playgroud)