Inizializzazione di IEnumerable <string> in C #


115

Ho questo oggetto:

IEnumerable<string> m_oEnum = null;

e vorrei inizializzarlo. Ho provato con

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

ma dice "IEnumerable non contiene un metodo per aggiungere una stringa. Qualche idea? Grazie

Risposte:


181

Ok, aggiungo alle risposte indicate che potresti anche cercare

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

o

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

4
Vecchio ormai, ma eviterei la seconda opzione. Potresti volerlo interagire con altri IEnumerables che non sono compatibili con gli array.
Joel Coehoorn

92

IEnumerable<T>è un'interfaccia. Devi iniziare con un tipo concreto (che implementa IEnumerable<T>). Esempio:

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

31

Come string[]implementa IEnumerable

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

18

IEnumerable è solo un'interfaccia e quindi non può essere istanziato direttamente.

Devi creare una classe concreta (come una List)

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

puoi quindi passarlo a tutto ciò che si aspetta un file IEnumerable.


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

IEnumerable<string> m_oEnum = GetData();

8
Anche se un po 'eccessivo, +1 per l'utilizzo della resa
Adriano Carneiro

1
@AdrianCarneiro +1 per la rima
5argon

6

Non è possibile creare un'istanza di un'interfaccia: è necessario fornire un'implementazione concreta di IEnumerable.


1

È possibile creare un metodo statico che restituirà l'IEnumerable desiderato in questo modo:

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

In alternativa basta fare:

IEnumerable<string> myStrings = new []{ "first item", "second item"};
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.