Liste (des Objekts) in Liste (der Zeichenfolge) konvertieren


74

Gibt es eine Möglichkeit, a in c # oder vb.net List(of Object)in a List(of String)umzuwandeln, ohne alle Elemente zu durchlaufen? (Hinter den Kulissen ist die Iteration in Ordnung - ich möchte nur prägnanten Code)

Update: Der beste Weg ist wahrscheinlich nur eine neue Auswahl

myList.Select(function(i) i.ToString()).ToList();

oder

myList.Select(i => i.ToString()).ToList();

Antworten:


80

Nicht möglich ohne Iteration, um eine neue Liste zu erstellen. Sie können die Liste in einen Container einschließen, der IList implementiert.

Sie können LINQ verwenden, um eine träge ausgewertete Version von IEnumerable<string>aus einer Objektliste wie der folgenden abzurufen:

var stringList = myList.OfType<string>();

21
Anstelle von OfType (das die Liste filtert) verwenden Sie Select (i => i.ToString ())
Geoff Appleford

1
@geoff: Kommt darauf an, wonach du suchst. Wenn ein Element null ist, schlägt i.ToString fehl. Sie könnten auch Cast <string> () in Betracht ziehen;
Mehrdad Afshari

2
@MehrdadAfshari: Unabhängig von der Nullbehandlung filtert OfType () Elemente heraus, die keine Zeichenfolgen sind. Es wird nicht versucht, ToString () umzuwandeln oder aufzurufen, sondern sie werden nur herausgefiltert. Das wurde nicht verlangt.
Daniel Schaffer

1
@ DanielSchaffer Ich habe die Frage wie folgt gelesen: Sie haben eine List<object>, die stringnur Objekte enthält , und Sie möchten List<string>stattdessen eine dieser Objekte erhalten. Die Frage ist unklar, was die Eingabe ist; in Abhängigkeit von der Eingangsspezifikation und Ihrem Ziel, können Sie auswählen möchten OfType<string>, Cast<string>()oder Select(...).
Mehrdad Afshari

48

Dies funktioniert für alle Typen.

List<object> objects = new List<object>();
List<string> strings = objects.Select(s => (string)s).ToList();

24

Wenn Sie mehr Kontrolle darüber haben möchten, wie die Konvertierung erfolgt, können Sie ConvertAll verwenden:

var stringList = myList.ConvertAll(obj => obj.SomeToStringMethod());

Ja, aber es ist hinter den Kulissen.
Kenny

11

Du meinst so etwas?

List<object> objects = new List<object>();
var strings = (from o in objects
              select o.ToString()).ToList();

1
Gehen Sie dazu folgendermaßen vor: List <string> strings = (von o in Objekten wählen Sie o.ToString ()). ToList ();
steve_c

1
Ich musste eine Liste von (App-) Benutzerobjekten für einen Anwendungsfall für die Umgebungsmigration in eine Liste <Zeichenfolge> konvertieren. Eine geringfügige Anpassung dieses Ansatzes hat für mich sehr gut funktioniert. var userIDsSource = (from r in MigrationSession.UsersSource select r.UserID).ToList();
Developer63

3

Nein - Wenn Sie ALLE Elemente einer Liste konvertieren möchten , müssen Sie ALLE Elemente dieser Liste auf die eine oder andere Weise berühren .

Sie können die Iteration auf verschiedene Arten angeben / schreiben (foreach () ...... oder .ConvertAll () oder was auch immer), aber am Ende wird auf die eine oder andere Weise ein Code über jeden einzelnen iterieren Element und konvertieren Sie es.

Marc


1

Können Sie die Zeichenfolgenkonvertierung durchführen, während die Liste (des Objekts) erstellt wird? Nur so kann vermieden werden, dass die gesamte Liste nach dem Erstellen der Liste (des Objekts) aufgelistet wird.

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.