Converter uma lista de objetos em uma matriz de uma das propriedades do objeto


133

Digamos que eu tenha a seguinte turma:

public class ConfigItemType
{
    public string Name { get; set; }
    public double SomeOtherThing { get; set; }
}

e depois faço uma lista das seguintes classes ( List<ConfigItemType> MyList)

Agora eu tenho um método com a seguinte assinatura:

void AggregateValues(string someUnrelatedValue, params string[] listGoesHere)

Como posso me encaixar MyListno listGoesHereuso do valor ConfigItemType.Namecomo a matriz de strings params?

Estou bastante certo de que o Linq pode fazer isso .... mas MyListnão possui um selectmétodo (que é o que eu teria usado).

Respostas:


278

Você está procurando

MyList.Select(x=>x.Name).ToArray();

Como Selecté um método de extensão, adicione esse espaço para nome adicionando um

using System.Linq

ao seu arquivo - ele aparecerá com o Intellisense.


Foi nisso que pensei também. Mas o Select não aparece no intellisense.
Vaccano 21/01

GAAAAAAA! Estava faltando o linq include!
Vaccano 21/01

1
você precisa usar using System.Data.Linq; então siga a resposta BrokenGlass
Rami Shareef

1
Eu sou burro! Ah bem. Representante gratuito por me ajudar a descobrir.
Vaccano 21/01

solução fantástica. Eu queria acessar a string "id" na minha lista de objetos. Funcionou perfeito List<String> somestringlist = myobjectlist.Select(x => x.id).ToList();
Marty_in_a_Box

19

Estou bastante certo de que o Linq pode fazer isso .... mas o MyList não possui um método de seleção (que é o que eu teria usado).

Sim, o LINQ pode fazer isso. É simplesmente:

MyList.Select(x => x.Name).ToArray();

Provavelmente, o problema é que você não tem uma referência System.Coreou está faltando uma usingdiretiva System.Linq.



6

Para todos que estão presos ao .NET 2.0, como eu, tente da seguinte maneira (aplicável ao exemplo no OP):

ConfigItemList.ConvertAll<string>(delegate (ConfigItemType ci) 
{ 
   return ci.Name; 
}).ToArray();

onde ConfigItemList é sua variável de lista.


Obrigado por postar para a multidão do .NET 2.0!
Webworm
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.