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).

Vaccano
fonte

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.

Vidro quebrado
fonte
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.

Jason
fonte
6

Isso também deve funcionar:

AggregateValues("hello", MyList.ConvertAll(c => c.Name).ToArray())
Shadow Wizard é Ear For You
fonte
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.

Spyros
fonte
Obrigado por postar para a multidão do .NET 2.0!
Webworm