2012-10-08 11 views

risposta

24

È possibile utilizzare Where in LINQ per selezionare le stringhe che non sono vuote:

return string.Join("\n", parts.Where(s => !string.IsNullOrEmpty(s))); 
1

Prova utilizzando LINQ

string[] hello = new string[] { "ads", "zxc", "wer", "", "wer", "", "243" }; 
string newString = string.Join("\n", hello.Where(x => x.Trim().Length != 0)); 
MessageBox.Show(newString); 

o

return string.Join("\n", hello.Where(x => x.Trim().Length != 0)); 
2

Un modo alternativo di fare questo è utilizzando StringSplitOptions.RemoveEmptyEntries:

ad es.

string yourString = "The|quick||brown|||fox|is|here"; 
char[] delimiter = new char[] { '|' }; 

string result = string.Join(",", yourString.Split(delimiter, StringSplitOptions.RemoveEmptyEntries)); 

Questo dà:

La, rapida, marrone, volpe, è, qui

@Stefan Steiger:

string yourString = "echo 'foo' | sed '/foo/d;'"; 

Questo dà:

echo 'foo', sed '/ foo/d;'

Quale è come mi aspetto. See the dotnetfiddle of it.

+1

È 'Valori' a' stringa' come '" foo | bar || baz ||| baf "'? – Michael

+0

E ora inserisco un valore come "echo 'foo' | sed '/ foo/d;'" e si interrompe orribilmente. –

0

Per farlo in .NET 2.0 (senza LINQ), ad es. per ReportingServices senza scrivere una funzione per esso:

C#

string a = "", b = "b", c = "", d = "d", e = ""; 
string lala = string.Join("/", 
    string.Join("\u0008", new string[] { a, b, c, d, e }).Split(new char[] { '\u0008' }, System.StringSplitOptions.RemoveEmptyEntries) 
); 

System.Console.WriteLine(lala); 

VB.NET

Dim a As String = "", b As String = "b", c As String = "", d As String = "d", e As String = "" 
Dim lala As String = String.Join("/", String.Join(vbBack, New String() {a, b, c, d, e}).Split(New Char() {ControlChars.Back}, System.StringSplitOptions.RemoveEmptyEntries)) 

System.Console.WriteLine(lala) 

Ciò presuppone che il backspace personaggio non si verifica nelle stringhe (di solito dovrebbe essere vero, perché non puoi semplicemente inserire questo personaggio con la tastiera).

Problemi correlati