Инициализация IEnumerable <string> в C #


116

У меня есть такой объект:

IEnumerable<string> m_oEnum = null;

и я хочу его инициализировать. Пробовал с

IEnumerable<string> m_oEnum = new IEnumerable<string>() { "1", "2", "3"};

но он говорит: «IEnumerable не содержит метода для добавления строки. Есть идеи? Спасибо

Ответы:


182

Хорошо, добавив к указанным ответам, вы также можете искать

IEnumerable<string> m_oEnum = Enumerable.Empty<string>();

или

IEnumerable<string> m_oEnum = new string[]{};

4
Сейчас старый, но я бы избегал второго варианта. Возможно, вы захотите, чтобы это взаимодействовало с другими IEnumerable, которые несовместимы с массивами.
— Джоэл Кохорн 05

94

IEnumerable<T>это интерфейс. Вам нужно начать с конкретного типа (который реализует IEnumerable<T>). Пример:

IEnumerable<string> m_oEnum = new List<string>() { "1", "2", "3"};


19

IEnumerable это просто интерфейс, поэтому его нельзя создать напрямую.

Вам нужно создать конкретный класс (например, a List)

IEnumerable<string> m_oEnum = new List<string>() { "1", "2", "3" };

затем вы можете передать это всему, что ожидает IEnumerable.



6

Вы не можете создать экземпляр интерфейса - вы должны предоставить конкретную реализацию IEnumerable.


2

Вы можете создать статический метод, который будет возвращать желаемый IEnumerable следующим образом:

public static IEnumerable<T> CreateEnumerable<T>(params T[] values) =>
    values;
//And then use it
IEnumerable<string> myStrings = CreateEnumerable("first item", "second item");//etc..

В качестве альтернативы просто выполните:

IEnumerable<string> myStrings = new []{ "first item", "second item"};

0

IEnumerable - это интерфейс, вместо того, чтобы искать, как создать экземпляр интерфейса, создайте реализацию, соответствующую интерфейсу: создайте список или массив.

IEnumerable<string> myStrings = new [] { "first item", "second item" };
IEnumerable<string> myStrings = new List<string> { "first item", "second item" };
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.