Przekonwertuj listę obiektów na tablicę jednej z właściwości obiektu

133

Powiedzmy, że mam następującą klasę:

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

a następnie tworzę listę następujących klas ( List<ConfigItemType> MyList)

Teraz mam metodę z następującym podpisem:

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

Jak mogę dopasować MyListsię do listGoesHereużywania wartości w ConfigItemType.Namejako tablicy ciągów parametrów?

Jestem prawie pewien, że Linq może to zrobić .... ale MyListnie ma na to selectmetody (której bym użył).

Vaccano
źródło

Odpowiedzi:

281

Szukasz

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

Ponieważ Selectjest to metoda rozszerzenia, upewnij się, że dodajesz tę przestrzeń nazw, dodając rozszerzenie

using System.Linq

do twojego pliku - wtedy pojawi się z Intellisense.

Rozbite szkło
źródło
O tym też pomyślałem. Ale Select nie pojawia się w inteligencji.
Vaccano
GAAAAAAA! Brakowało mi linq include!
Vaccano
1
musisz użyć using System.Data.Linq; następnie postępuj zgodnie z odpowiedzią BrokenGlass
Rami Shareef
1
Jestem głupkiem! Ach tak. Bezpłatny przedstawiciel za pomoc w rozwiązaniu tego problemu.
Vaccano
fantastyczne rozwiązanie. Chciałem uzyskać dostęp do ciągu „id” na mojej liście obiektów. Działało idealnie List<String> somestringlist = myobjectlist.Select(x => x.id).ToList();
Marty_in_a_Box
19

Jestem prawie pewien, że Linq może to zrobić .... ale MyList nie ma na niej metody wyboru (której bym użył).

Tak, LINQ może to zrobić. Po prostu:

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

Najprawdopodobniej problem polega na tym, że albo nie masz odniesienia do System.Core, albo brakuje ci usingdyrektywy dla System.Linq.

Jason
źródło
6

Powinno to również działać:

AggregateValues("hello", MyList.ConvertAll(c => c.Name).ToArray())
Czarodziej cienia to ucho dla Ciebie
źródło
6

Dla każdego, kto utknął w .NET 2.0, jak ja, wypróbuj następujący sposób (dotyczy przykładu w OP):

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

gdzie ConfigItemList to zmienna listy.

Spyros
źródło
Dziękujemy za wysłanie wiadomości dla tłumu .NET 2.0!
robak sieciowy