IEnumerable <string> in C # initialisieren

115

Ich habe dieses Objekt:

IEnumerable<string> m_oEnum = null;

und ich möchte es initialisieren. Versucht mit

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

aber es heißt "IEnumerable enthält keine Methode zum Hinzufügen von Zeichenfolgen. Irgendeine Idee? Danke

markzzz
quelle

Antworten:

181

Ok, zu den angegebenen Antworten hinzufügen, nach denen Sie möglicherweise auch suchen

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

oder

IEnumerable<string> m_oEnum = new string[]{};
sehe sehen
quelle
4
Alt jetzt, aber ich würde die zweite Option vermeiden. Möglicherweise möchten Sie, dass dies mit anderen IEnumerables interagiert, die nicht mit Arrays kompatibel sind.
Joel Coehoorn
92

IEnumerable<T>ist eine Schnittstelle. Sie müssen mit einem konkreten Typ (der implementiert IEnumerable<T>) initiieren . Beispiel:

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

As string[]implementiert IEnumerable

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

IEnumerable ist nur eine Schnittstelle und kann daher nicht direkt instanziiert werden.

Sie müssen eine konkrete Klasse erstellen (wie a List)

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

Sie können dies dann an alles weitergeben, was eine erwartet IEnumerable.

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

IEnumerable<string> m_oEnum = GetData();
Kirill Polishchuk
quelle
8
Obwohl ein wenig übertrieben, +1 für die Verwendung von Ertrag
Adriano Carneiro
1
@ AdrianCarneiro +1 für den Reim
5argon
6

Sie können eine Schnittstelle nicht instanziieren - Sie müssen eine konkrete Implementierung von IEnumerable bereitstellen.

BonyT
quelle
1

Sie können eine statische Methode erstellen, die die gewünschte IEnumerable wie folgt zurückgibt:

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

Alternativ tun Sie einfach:

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