2017-04-11 14 views
2

Nehmen wir an, ich eine Klasse haben:Konvertieren Liste <MyClass> zur Liste <MyClass.Mydata> in C#

public class MyClass 
{ 
    public string Name {get; set;} 
    public int Value {get; set;} 
} 

Ich habe eine Liste dieser Klasse:

List<MyClass> 

und ich möchte ein machen :

List<string> 

die alle MyClass.Name aus enthalten:

List<MyClass> 

Gibt es einen schnellen Weg, wie man das zum Beispiel mit Linq macht?

Antwort

11

Sicher, verwenden Select und ToList:

List<string> nameList = list.Select(x => x.Name).ToList(); 

Ein anderer, nicht-LINQ, Art und Weise zu verwenden, ist List.ConvertAll:

List<string> nameList = list.ConvertAll(x => x.Name); 

Dies ist etwas effizienter, weil es die Größe des Ziel weiß Liste vorher.

+0

Danke, genau das habe ich vermisst. –

+0

@JosefKvita, vergessen Sie nicht, die Antwort zu akzeptieren, dies und Upvote ist, wie Sie "Danke" auf SO sagen. – Sinatr

3

, die sehr trivial ist, brauchen Sie nur ein Select() und dann in einem das Ergebnis materialisieren List<T>ToList() mit:

List<string> result = list.Select(x=>x.Name).ToList(); 
+0

Danke, genau das habe ich vermisst. –

1

Wenn Sie eine Menge von Typkonvertierungen in Ihrem Code (zB von Entity-Modell zu DTOs haben), werfen Sie einen Blick auf Automapper. Dies ermöglicht Ihnen, alle Mapping-Definitionen an einem zentralen Ort zu haben. Es kann auch Objekte nach Konvention konvertieren.

Sie können Sammlungen aus der Box auflösen, indem Sie die bekannten Zuordnungen auf jedes Mitglied anwenden.

MyClass[] myClassArray = new [] { myClass1, myClass2 }; 
string[] result = Mapper.Map<string[]>(myClassArray); 
Verwandte Themen