2012-10-08 32 views

Respuesta

24

Puede utilizar Where en LINQ para seleccionar cadenas que no están vacías:

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

Pruébelo utilizando 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

Una forma alternativa de hacer esto es mediante el uso de StringSplitOptions.RemoveEmptyEntries:

p. Ej.

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

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

Esto da:

El, rápida, marrón, zorro, es, aquí

@Stefan Steiger:

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

Esto da:

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

Que es como yo esperaría. See the dotnetfiddle of it.

+1

Es 'Values' una 'cadena' como' "foo | bar || baz ||| baf" '? – Michael

+0

Y ahora introduzco un valor como "echo 'foo' | sed '/ foo/d;'" y se rompe horriblemente. –

0

Para hacerlo en .NET 2.0 (sin LINQ), p. para ReportingServices sin necesidad de escribir una función para ello:

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) 

Esto supone que el retroceso carácter no está en sus cadenas (por lo general debe ser verdad, porque no puedes simplemente ingresar este caracter por teclado).

Cuestiones relacionadas