2012-10-08 15 views

Odpowiedz

24

Można użyć Where w LINQ aby wybrać ciągi, które nie są puste:

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

Spróbuj używając 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); 

lub

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

Alternatywnym sposobem osiągnięcia tego celu za pomocą StringSplitOptions.RemoveEmptyEntries:

np.

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

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

Daje:

The, szybkie, brązowy, lisy, jest tutaj

@Stefan Steiger:

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

daje to:

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

Jak można się spodziewać. See the dotnetfiddle of it.

+1

Czy "wartości" to "ciąg" jak "foo | bar || baz ||| baf" '? – Michael

+0

I teraz wpisuję wartość taką jak "echo" foo '| sed'/foo/d; "" i łamie się okropnie. –

0

Aby to zrobić w .NET 2.0 (bez LINQ), np. dla ReportingServices bez pisania funkcję dla niego:

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) 

ta zakłada, że ​​Backspace postać nie występuje w swoich strun (zazwyczaj powinny być prawdziwe, ponieważ nie można po prostu wprowadzić tej postaci za pomocą klawiatury).

Powiązane problemy