C # Элемент не добавляется в список <String> - PullRequest
0 голосов
/ 13 июня 2018

Ниже приведена моя реализация интерфейса ICollector из Azure.

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 голосов
/ 13 июня 2018

Вы создаете новый список каждый раз

Не делайте этого

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

Делайте это

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

или

public List<T> Collector { get; } = new List<T>();
0 голосов
/ 13 июня 2018

Следующее неверно

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

Функция стрелки - это сокращенный синтаксис для метода.То, что вы написали, эквивалентно следующему:

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

Так что каждый раз, когда вы вызываете Collector, вы возвращаете новый список, добавляете в него элемент, а затем уже не имеете ссылки на этот список.

Если вам нужно поле, замените его следующим:

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);
    }
}
...