2013-01-03 5 views
10

anfügen Ich suchte nach dem besten/saubersten Weg, um über eine Liste von Strings zu iterieren und dann eine einzige Zeichenfolge von denen durch Zeilenumbrüche getrennt (mit Ausnahme der letzten). Wie so:Der beste Weg, um Newline String außer zuletzt

String 1 
String 2 
String 3 

habe ich zwei Schleifen hier geschrieben, die am Ende des Strings eine neue Zeile hat (was ich vermeiden wollen) und eine andere, die dies nicht tut. Das eine scheint mir nicht nur "sauber" zu sein. Ich würde denken, dass es einen einfacheren Weg geben würde, so dass die Logik fast so einfach ist wie in dem Beispiel, das eine neue Zeile am Ende der Zeichenkette hat.

List<string> errorMessages = new List<string>(); 
string messages = ""; 

//Adds newline to last string. Unwanted. 
foreach(string msg in errorMessages) 
{ 
    messages += msg + "\n"; 
} 

messages = ""; 
bool first = true; 

//Avoids newline on last string 
foreach (string msg in errorMessages) 
{ 
    if(first) 
    { 
     first = false; 
     messages = msg; 
    } 
    else 
    { 
     messages += "\n" + msg; 
    } 
} 

Vielleicht ist es Wunschdenken, aber ich würde dies ein gemeinsames Auftreten genug war gedacht, um eine bessere Art und Weise zu rechtfertigen, mein Ziel zu erreichen.

Antwort

26

Sie können String.Join verwenden.

string.Join("\n", errorMessages); 
+1

Danke, das ist genau das, was ich wollte. – Justin

32

JOIN

string.Join(System.Environment.NewLine, errorMessages); 
+4

+1 für 'System.Environment.NewLine'. –

3

Der kürzeste Weg entweder .Aggregate(...) oder String.Join(...) zu verwenden ist.

var messages = errorMessages.Aggregate((x, y) => x + Environment.NewLine + y); 

Oder

var messages = String.Join(Environment.NewLine, errorMessages); 
6
using System; 

string.Join(Environment.NewLine, errorMessages); 
Verwandte Themen