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

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.


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.



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 .


Vielen Dank für die Veröffentlichung für die .NET 2.0-Menge!
Webworm
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.