Initialisation de IEnumerable <string> en C #

115

J'ai cet objet:

IEnumerable<string> m_oEnum = null;

et je voudrais l'initialiser. Essayé avec

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

mais il dit "IEnumerable ne contient pas de méthode pour ajouter une chaîne. Une idée? Merci

Markzzz
la source

Réponses:

181

Ok, ajoutant aux réponses que vous dites peut - être aussi à la recherche d'

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

ou

IEnumerable<string> m_oEnum = new string[]{};
sehe
la source
4
Vieux maintenant, mais j'éviterais la deuxième option. Vous souhaiterez peut-être que cela interagisse avec d'autres IEnumerables qui ne sont pas compatibles avec les tableaux.
Joel Coehoorn
92

IEnumerable<T>est une interface. Vous devez vous lancer avec un type concret (qui implémente IEnumerable<T>). Exemple:

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

Comme string[]implémente IEnumerable

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

IEnumerable est juste une interface et ne peut donc pas être instanciée directement.

Vous devez créer une classe concrète (comme a List)

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

vous pouvez ensuite le transmettre à tout ce qui attend un fichier IEnumerable.

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

IEnumerable<string> m_oEnum = GetData();
Kirill Polishchuk
la source
8
Bien qu'un peu exagéré, +1 pour l'utilisation du rendement
Adriano Carneiro
1
@AdrianCarneiro +1 pour la rime
5argon
6

Vous ne pouvez pas instancier une interface - vous devez fournir une implémentation concrète de IEnumerable.

BonyT
la source
2

Vous pouvez créer une méthode statique qui retournera le IEnumerable souhaité comme ceci:

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

Sinon, faites simplement:

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

IEnumerable est une interface, au lieu de chercher comment créer une instance d'interface, créez une implémentation qui correspond à l'interface: créez une liste ou un tableau.

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