2009-05-15 3 views
14

ok Ich gebe auf, wie machst du das in einer Zeile?Wie konvertiert man Objekt [] zu Liste <string> in einer Zeile von C# 3.0?

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    //List<string> fields = values.ToList<string>(); 
    //List<string> fields = values as List<string>; 
    //List<string> fields = (List<string>)values; 

    List<string> fields = new List<string>(); 
    foreach (object value in values) 
    { 
     fields.Add(value.ToString()); 
    } 

    //process the fields here knowning they are strings 
    ... 
} 
+2

Technisch ist es C# 3.0, das verwendet werden kann, um .NET Frameworks 2.0, 3.0 oder 3.5 in VS2008 auszurichten. Verwirrend, ich weiß :) – Lucas

+0

richtig, danke –

Antwort

45

Verwenden Sie C# 3.0 mit LINQ? Es ist ziemlich einfach, dann:

List<string> fields = values.Select(i => i.ToString()).ToList(); 
+4

Ich sehe nirgendwo, dass das Objekt-Array tatsächlich ein Array von Strings war. Diese Antwort ist richtig, weil du * genau * duplizierst, was das OP in einem Einzeiler gepostet hat. –

+1

@Andrew: Ja, guter Punkt. Ich habe die Frage klar zu schnell gelesen. Caveat jetzt in meinem Beitrag erwähnt. – Noldorin

+0

Wie Sie richtig vom Kontext angenommen haben, kommen die Objekte von XAML und theoretisch könnte jeder Typ sein, also mit dieser Antwort, wenn ich eine Ganzzahl sende, wird es korrekt in eine Zeichenfolge konvertiert, perfekt –

16

Wenn Sie LINQ zur Verfügung haben (in .NET 3.5) und C# 3.0 (für Erweiterungsmethoden), dann gibt es ein ganz schönes Motto:

var list = values.Cast<string>().ToList(); 

Du wirst nichts bekommen viel kürzer als das, was Sie für .NET 2.0/C# 2.0 geschrieben haben.

Vorbehalt: Ich habe gerade festgestellt, dass Ihr object[] nicht unbedingt vom Typ string ist. Wenn das tatsächlich der Fall ist, gehen Sie mit Matt Hamiltons Methode, die die Arbeit gut macht. Wenn das Element Ihres Arrays tatsächlich vom Typ string ist, dann wird meine Methode natürlich funktionieren.

+2

große Antwort - viel einfacher als eine Linq wählen. –

+0

Beachten Sie, dass dies fehlschlägt, wenn ein Wert keine Zeichenfolge ist. –

+0

@mausch: Ja, ich habe gerade die Antwort bearbeitet, um den Vorbehalt hinzuzufügen. – Noldorin

2

Während kein Motto in Bezug <> Erklärung zur Liste, gibt Ihnen gleiche Wirkung ohne Linq zu erfordern.

List<string> list = new List<string>(); 
Array.ForEach(values, value => list.Add(value.ToString())); 
4

Eine weitere Variante, die richtige sein könnte:

List<string> list = values.OfType<string>().ToList(); 

Dadurch werden alle Objekte in der ursprünglichen Liste herauszufiltern, die nicht string Objekte sind, statt entweder eine Ausnahme zu werfen oder zu versuchen, sie alle zu konvertieren in Strings.

+0

.OfType ist sehr interessant, wird sich daran erinnern, aber in diesem Kontext muss ich die drei Werte anzeigen, was auch immer sie sind (String, Integer, etc.) –

9

C# 2.0:

List<string> stringList = new List<string>(Array.ConvertAll<object,string>(values, new Converter<object,string>(Convert.ToString))); 
3
Array.ConvertAll(inputArray, p => p.ToString()) 

Dies wandelt ein Array von object Typ Array von string. Sie können in andere Array-Typen konvertieren, indem Sie den Lambda-Ausdruck ändern.

Verwandte Themen