2013-01-03 8 views
10

Szukałem najlepszego/najczystszego sposobu na iterację listy list, a następnie utworzenia pojedynczego ciągu znaków oddzielonych znakami nowej linii (z wyjątkiem ostatniego). Tak:Najlepszy sposób dodawania nowej linii do ciągu znaków z wyjątkiem ostatniego

String 1 
String 2 
String 3 

Pisałem tu dwie pętle, która ma nowej linii na końcu łańcucha (który chcę uniknąć), a inny, że nie. Ten nie tylko nie wydaje mi się "czysty". Myślę, że byłby prostszy sposób na zrobienie tego, aby logika była prawie tak prosta jak w przykładzie, który ma nową linię na końcu ciągu.

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; 
    } 
} 

Może to myślenie pobożne, ale uważam, że było to dość częste zjawisko, by zagwarantować lepszy sposób osiągnięcia mojego celu.

Odpowiedz

26

Można użyć String.Join.

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

Dzięki, to jest dokładnie to, co chciałem. – Justin

32

Korzystanie dołączyć

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

+1 dla 'System.Environment.NewLine'. –

3

Najkrótsza droga jest użyć .Aggregate(...) lub String.Join(...).

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

Albo

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

string.Join(Environment.NewLine, errorMessages);