Der beste Weg, um eine Liste einer Eigenschaft von T aus einer ListT zu erhalten

8

Ich habe eine List<Users> - Benutzer haben eine Username-Eigenschaft.

Was ich wissen möchte ist - gibt es einen besseren Weg, einen List<string> aller Benutzernamen zu bekommen, als einfach durchzuschlendern und meine neue Liste aufzubauen?

    
Andy 07.09.2010, 14:44
quelle

5 Antworten

22

Verwenden Sie LINQ:

%Vor%     
Arcturus 07.09.2010, 14:46
quelle
12

So:

%Vor%

Beachten Sie, dass die userNames -Liste nachfolgende Änderungen an users oder deren UserName s nicht widerspiegelt.

    
SLaks 07.09.2010 14:48
quelle
5

Wenn Sie tatsächlich eine Liste benötigen, dann ist die LINQ-Methode das Beste, was Sie tun können (es könnte eine marginale Geschwindigkeitsverbesserung beim Erstellen einer neuen Liste mit der entsprechenden Kapazität geben und dann hinzufügen, aber es ist unwahrscheinlich, dass sie nennenswert ist.) p>

Bearbeiten: Wenn Sie dies tun wollen, verwenden Sie ConvertAll nicht Select gefolgt von ToList , besonders wenn Ihre Liste groß sein könnte. ConvertAll weist der richtigen Größe vor, deren Wichtigkeit für die Leistung mit der Größe der Quellliste wächst.

Wenn Sie eine schreibgeschützte IList verwenden möchten, die sich so verhält, wie Sie dies getan haben, können Sie aus einer konvertierenden Listenklasse eine viel bessere Leistung erzielen:

%Vor%

Damit, dann:

%Vor%

erstellt ein neues Objekt in konstanter Zeit, das sich wie eine schreibgeschützte Liste der Namen verhält.

(Eine Schutzmaßnahme gegen einen Null-Benutzer gibt hier eine Null-Zeichenfolge zurück, anderes Verhalten kann natürlich angegeben werden).

    
Jon Hanna 07.09.2010 16:00
quelle
4
%Vor%     
Klaus Byskov Pedersen 07.09.2010 14:46
quelle
1

Sie tun

%Vor%     
Mario 07.09.2010 16:02
quelle

Tags und Links