Konvertieren Sie eine Liste von Objekten in ein Array mit einer der Objekteigenschaften

133

Angenommen, ich habe die folgende Klasse:

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

und dann mache ich eine Liste der folgenden Klassen ( List<ConfigItemType> MyList)

Jetzt habe ich eine Methode mit folgender Signatur:

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

Wie kann ich mich MyListin die listGoesHereVerwendung des Werts ConfigItemType.Nameals params-String-Array einfügen?

Ich bin mir ziemlich sicher, dass Linq dies kann ... aber es MyListgibt keine selectMethode (die ich verwendet hätte).

Vaccano
quelle

Antworten:

278

Du suchst nach

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

Da Selectes sich um eine Erweiterungsmethode handelt, stellen Sie sicher, dass Sie diesen Namespace hinzufügen, indem Sie a hinzufügen

using System.Linq

zu Ihrer Datei - dann wird es mit Intellisense angezeigt.

Glassplitter
quelle
Daran habe ich auch gedacht. Aber Select wird im Intellisense nicht angezeigt.
Vaccano
GAAAAAAA! Mir fehlte das linq include!
Vaccano
1
Sie müssen mit System.Data.Linq verwenden; dann folgen BrokenGlass Antwort
Rami Shareef
1
Ich bin dumm! Ah, gut. Kostenlose Wiederholung, um mir zu helfen, es herauszufinden.
Vaccano
fantastische Lösung. Ich wollte auf die Zeichenfolge "id" in meiner Objektliste zugreifen. Perfekt List<String> somestringlist = myobjectlist.Select(x => x.id).ToList();
funktioniert
19

Ich bin mir ziemlich sicher, dass Linq dies kann ... aber MyList verfügt nicht über eine Auswahlmethode (die ich verwendet hätte).

Ja, LINQ kann das. Es ist einfach:

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

Das Problem ist höchstwahrscheinlich, dass Sie entweder keinen Verweis auf System.Corehaben oder eine usingDirektive für vermissen System.Linq.

Jason
quelle
6

Dies sollte auch funktionieren:

AggregateValues("hello", MyList.ConvertAll(c => c.Name).ToArray())
Der Schatten-Assistent ist das Ohr für Sie
quelle
6

Versuchen Sie für alle, die wie ich mit .NET 2.0 nicht weiterkommen, Folgendes: (gilt für das Beispiel im OP):

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

Dabei ist ConfigItemList Ihre Listenvariable .

Spyros
quelle
Vielen Dank für die Veröffentlichung für die .NET 2.0-Menge!
Webworm