Краткий ответ: Вы не можете добавлять элементы в IEnumerable<T>
Чуть более длинное объяснение:
IEnumerable
- это интерфейс, который заботится исключительно о возможности перечисления / перебора коллекции элементов. Это единственная цель существования IEnumerable
. Он абстрагирует любое представление о способе хранения или извлечения перечислимых элементов (это может быть строка символов, список элементов, поток байтов или ряд результатов вычислений), таким образом, если у вас есть интерфейс, который является IEnumerable
, вы не можете добавлять элементы к нему, вы можете перебирать только те элементы, которые он предоставляет.
Тем не менее, правильный способ добавить элементы в IEnumerable
- это вернуть новый IEnumerable
с новыми элементами, добавленными к содержимому оригинала.
Также с библиотеками Linq у вас есть метод расширения, который позволяет преобразовывать ваш IEnumerable в список с помощью IEnumerable.ToList()
, и вы можете добавлять элементы в список. Это не может быть правильным способом.
С библиотеками Linq в вашем пространстве имен вы можете делать следующее:
using System;
using System.Collections.Generic;
using System.Linq;
namespace EnumTester
{
class Program
{
static void Main(string[] args)
{
IEnumerable<string> enum = GetObjectEnumerable();
IEnumerable<string> concatenated = enum.Concat(new List<string> { "concatenated" });
List<string> stringList = concatenated.ToList();
}
}
}