Inicialización de IEnumerable <string> en C #

115

Tengo este objeto:

IEnumerable<string> m_oEnum = null;

y me gustaría inicializarlo. Probado con

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

pero dice "IEnumerable no contiene un método para agregar una cadena. ¿Alguna idea? Gracias

Markzzz
fuente

Respuestas:

181

Ok, agregando a las respuestas indicadas, es posible que también esté buscando

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

o

IEnumerable<string> m_oEnum = new string[]{};
sehe
fuente
4
Viejo ahora, pero evitaría la segunda opción. Es posible que desee que esto interactúe con otros IEnumerables que no son compatibles con matrices.
Joel Coehoorn
92

IEnumerable<T>es una interfaz. Necesitas iniciar con un tipo concreto (que implemente IEnumerable<T>). Ejemplo:

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

Como string[]implementa IEnumerable

IEnumerable<string> m_oEnum = new string[] {"1","2","3"}
Bob Vale
fuente
18

IEnumerable es solo una interfaz y, por lo tanto, no se puede instanciar directamente.

Necesitas crear una clase concreta (como una List)

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

luego puede pasar esto a cualquier cosa que espere un IEnumerable.

ChrisF
fuente
13
public static IEnumerable<string> GetData()
{
    yield return "1";
    yield return "2";
    yield return "3";
}

IEnumerable<string> m_oEnum = GetData();
Kirill Polishchuk
fuente
8
Aunque un poco exagerado, +1 por usar el rendimiento
Adriano Carneiro
1
@AdrianCarneiro +1 para la rima
5argon
6

No puede crear una instancia de una interfaz; debe proporcionar una implementación concreta de IEnumerable.

BonyT
fuente
2

Puede crear un método estático que devolverá el IEnumerable deseado como este:

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

Alternativamente, haz lo siguiente:

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

IEnumerable es una interfaz, en lugar de buscar cómo crear una instancia de interfaz, cree una implementación que coincida con la interfaz: cree una lista o una matriz.

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