Использование IEnumerable‹T› для добавления экземпляров объекта в ядро ​​.net

Мне нужно добавить объект в IEnumerable, но я не уверен на 100%, как это сделать. Похоже, .add у меня не работает в моем коде .net core 3.1.

Первый класс это:

 public class ContainerA
{
    public string TestA { get; set; }

    public IEnumerable<ContainerB> Containers { get; set; }
}

Затем есть класс ContainerB:

public class ContainerB
{
    public string TextString { get; set; }
}

Я не знаю, как добавить группу Continers объекта ContainerB в экземпляр объекта ContainerA, например:

var contA = new ContainerA();

contA.TestA = "works fine";

// Issues here and how to get lots of ContainerB.TestString into the contA instance.

Спасибо за вашу помощь.


person cdub    schedule 01.07.2020    source источник
comment
Используйте методы расширения .Concat или .Append.   -  person Dai    schedule 01.07.2020
comment
Точный дубликат Как я могу добавить элемент в IEnumerable Коллекция ‹T›?, а также Добавление элемента в IEnumerable   -  person Pavel Anikhouski    schedule 01.07.2020


Ответы (1)


IEnumerable не поддерживает добавления, если вы хотите добавить, вы можете использовать IList или ICollection для типа свойства Containers. Если вы хотите придерживаться IEnumerable, вы можете создать новый через Concat (или Append для добавления одного элемента) и назначьте его Containers:

IEnumerable<ContainerB> toAdd = ...; //  lots of ContainerB.TestString
contA.Containers = contA.Containers
    .Concat(toAdd);
person Guru Stron    schedule 01.07.2020
comment
@cdub Я думаю, что они, возможно, исправили это в .NET Core, но, по крайней мере, с .NET Framework всегда будьте осторожны при использовании IList таким образом. Это должно работать... но, по крайней мере, в .NET Framework массивы реализованы IList, но затем они вызывают исключения, если вы используете такие вещи, как IList.Add. Это не означает, что IList нельзя использовать таким образом; это должно. Просто будьте осторожны, что это не реализовано массивом из-за дизайнерского решения, принятого когда-то. - person Panzercrisis; 01.07.2020