2012-10-08 12 views
16

मैं उपयोग कर रहा हूँ निम्नलिखित:मैं तारों की सरणी में कैसे शामिल हो सकता हूं लेकिन पहले खाली सरणी के तत्वों को हटा सकता हूं?

return string.Join("\n", parts); 

पार्ट्स 7 प्रविष्टियां हैं, लेकिन उनमें से दो रिक्त स्ट्रिंग "हैं।" मैं इन दो प्रविष्टियों को पहले कैसे हटा सकता हूं और फिर शेष पांच में शामिल हो सकता हूं?

उत्तर

24

आप तार जो खाली नहीं हैं का चयन करने के LINQ में Where उपयोग कर सकते हैं:

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

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

या

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

ऐसा करने का एक वैकल्पिक तरीका का उपयोग कर यह प्रयास करें StringSplitOptions.RemoveEmptyEntries का उपयोग करके है:

उदा।

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

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

यह देता है:

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

यह देता है::

The, त्वरित, भूरे रंग के, लोमड़ी,, यहाँ

@Stefan स्टीगर है

गूंज 'foo', sed '/ foo/d;'

जैसा कि मैं अपेक्षा करता हूं। See the dotnetfiddle of it

+1

'मान' '' foo | bar || baz ||| baf "' 'मान 'है। – Michael

+0

और अब मैं "echo 'foo' | sed '/ foo/d;' 'जैसे मान दर्ज करता हूं और यह बहुत ही टूट जाता है। –

0

इसे .NET 2.0 (कोई LINQ) में करने के लिए, उदा। इसके लिए एक समारोह लेखन के बिना ReportingServices के लिए:

सी #

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) 

मतलब यह है कि चरित्र बैकस्पेस अपने तार में नहीं होती (आमतौर पर सही होना चाहिए, क्योंकि आप कीबोर्ड द्वारा इस चरित्र को आसानी से दर्ज नहीं कर सकते हैं)।

संबंधित मुद्दे