2008-11-24 13 views

Antwort

203

Das Problem ist, dass Sie List<T>.Reverse() sind ruft die void zurückgibt.

können Sie entweder tun:

List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>(); 
names.Reverse(); 

oder:

IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>(); 

Letzteres ist teurer, als eine willkürliche IEnumerable<T> Umkehr beinhaltet alle Daten zu puffern und was dann alles - während List<T> kann alle Umkehrungen "in-place" machen. (Der Unterschied hier ist, dass es die Enumerable.Reverse<T>() Extension-Methode ruft anstelle der List<T>.Reverse() Instanz-Methode.)

Effizientere noch, könnten Sie verwenden:

string[] namesArray = "Tom,Scott,Bob".Split(','); 
List<string> namesList = new List<string>(namesArray.Length); 
namesList.AddRange(namesArray); 
namesList.Reverse(); 

Dies vermeidet Puffer einer ungeeigneten Größe zu schaffen - auf Kosten von vier Aussagen, wo man es tut ... Wie immer die Lesbarkeit im realen Anwendungsfall gegenüber der Leistung abwägen.

+21

Skeet ist ein Biest! – flesh

+2

gut ausgearbeitet, ich schätze wirklich! –

1

Versuchen Sie folgendes:

List<string> names = new List<string>("Tom,Scott,Bob".Split(',')); 
names.Reverse(); 
+0

Ich bekomme den Fehler - Kann nicht implizit konvertieren Typ 'void' zu 'System.Collections.Generic.List BuddyJoe

+1

Ich habe es gerade versucht und es hat perfekt funktioniert – Yona

3
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList(); 

Dies funktioniert.

1

Was hier fehlt ist, dass .Reverse() ist eine void-Methode. Es ist nicht möglich, das Ergebnis von .Reverse() einer Variablen zuzuordnen. Sie können jedoch die Reihenfolge ändern Enumerable.Reverse() und erhalten Ihr Ergebnis

var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>() 

Der Unterschied zu verwenden ist, dass Enumerable.Reverse() gibt eine IEnumerable <T> statt Nichtigkeit Rückkehr

7

Ich weiß, dass diese Frage ziemlich alt ist, aber ich hatte ein ähnliches Problem, außer dass meine Zeichenfolge Leerzeichen enthielt. Für diejenigen, die wissen müssen, wie mit mehr einen String zu trennen als nur ein Komma:

string str = "Tom, Scott, Bob"; 
    IList<string> names = str.Split(new string[] {","," "}, 
    StringSplitOptions.RemoveEmptyEntries); 

Die StringSplitOptions entfernt die Datensätze, die nur einen Raum char sein würde ...

+0

Dies funktioniert nicht, wenn Sie "Tom Cruise" anstelle von Tom – ablaze

+0

https://Stackoverflow.com/a/45799171/799593 haben – ablaze

0

Wenn Sie mehrere Trennzeichen

  1. Verwenden
  2. Filter werden alle leeren Saiten
  3. Trim führende/nachfolgende Leerzeichen

folgenden funktionieren sollte versuchen:

string str = "Tom Cruise, Scott, ,Bob | at"; 
IEnumerable<string> names = str 
          .Split(new char[]{',', '|'}) 
          .Where(x=>x!=null && x.Trim().Length > 0) 
          .Select(x=>x.Trim()); 

Ausgabe

  • Tom
  • Cruise
  • Scott
  • Bob
  • bei

Jetzt können Sie natürlich in umgekehrter Reihenfolge wie andere vorgeschlagen.

Verwandte Themen