Inicializando IEnumerable <string> em C #


115

Eu tenho este objeto:

IEnumerable<string> m_oEnum = null;

e gostaria de inicializá-lo. Tentei com

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

mas diz "IEnumerable não contém um método para adicionar string. Alguma ideia? Obrigado

Respostas:


181

Ok, acrescentando às respostas declaradas, você também pode estar procurando

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

ou

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

4
Velho agora, mas eu evitaria a segunda opção. Você pode querer que isso interaja com outros IEnumerables que não são compatíveis com arrays.
Joel Coehoorn

92

IEnumerable<T>é uma interface. Você precisa iniciar com um tipo concreto (que implementa IEnumerable<T>). Exemplo:

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

31

Como string[]implementa IEnumerable

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

18

IEnumerable é apenas uma interface e não pode ser instanciada diretamente.

Você precisa criar uma classe concreta (como a List)

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

você pode então passar isso para qualquer pessoa que esteja esperando um IEnumerable.


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

IEnumerable<string> m_oEnum = GetData();

8
Embora um pouco exagero, +1 por usar o rendimento
Adriano Carneiro

1
@AdrianCarneiro +1 para a rima
5argon

6

Você não pode instanciar uma interface - você deve fornecer uma implementação concreta de IEnumerable.


1

Você pode criar um método estático que retornará o IEnumerable desejado 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, basta fazer:

IEnumerable<string> myStrings = new []{ "first item", "second item"};
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.