2012-10-08 14 views

Trả lời

24

Bạn có thể sử dụng Where trong LINQ để chọn dây mà không có sản phẩm nào:

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

Thử sử dụng 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); 

hoặc

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

Một cách thay thế để làm điều này bằng cách sử dụng StringSplitOptions.RemoveEmptyEntries:

ví dụ:

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

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

Điều này cho phép:

Các, nhanh chóng, nâu, fox, là, đây

@Stefan Steiger:

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

Điều này cho phép:

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

Như tôi mong đợi. See the dotnetfiddle of it.

+1

Có phải 'Giá trị' là' chuỗi' như '" foo | bar || baz ||| baf "'? – Michael

+0

Và bây giờ tôi nhập một giá trị như "echo 'foo' | sed '/ foo/d;'" và nó phá vỡ khủng khiếp. –

0

Để làm điều đó trong .NET 2.0 (không có LINQ), ví dụ: cho ReportingServices mà không cần viết một hàm cho nó:

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) 

này giả định rằng các phím lùi nhân vật không xảy ra trong chuỗi của bạn (thường là phải được sự thật, bởi vì bạn không thể đơn giản nhập ký tự này bằng bàn phím).

Các vấn đề liên quan