2013-01-13 112 views
35

我有這樣的:從字符串數組中刪除所有空元素

List<string> s = new List<string>{"", "a", "", "b", "", "c"}; 

我想從它很快(可能通過LINQ),而不使用foreach聲明,因爲這使代碼刪除所有空元素("")看起來很醜陋。

+2

幾乎是一個副本:[如何從通用列表中刪除「空」項?](http://stackoverflow.com/q/12849528/256431) –

+2

順便說一句,那不是一個'string'數組,而是一個列表。 –

回答

58

您可以使用List.RemoveAll

C#

s.RemoveAll(str => String.IsNullOrEmpty(str)); 

VB.NET

s.RemoveAll(Function(str) String.IsNullOrEmpty(str)) 
+14

我會簡單地寫's.RemoveAll(String.IsNullOrEmpty);',在這種情況下你不需要lambda。 –

+2

@PaoloMoretti:+1好點。但至少在VB.NET中,它並不是真的更短:'s.RemoveAll(AddressOf String.IsNullOrEmpty)',lamdba表明可以輕鬆修改它。 Imho與lambda更具可讀性。 –

+0

爲什麼它會返回已移除元素的數量而不是清除列表?這個'int count = s.RemoveAll(string.IsNullOrEmpty);'是有效的,但是'List list = s.RemoveAll(string.IsNullOrEmpty);'不。 –

10
s = s.Where(val => !string.IsNullOrEmpty(val)).ToList(); 
+4

這是不正確的應該是s = s.Where(val =>!string.IsNullOrEmpty(val))。ToList();他的初始類型是'List ''所以你需要確保它保持'List ' – MethodMan

+0

這種方式可能適用於IList。 IList沒有RemoveAll。 – liang

11

退房與List.RemoveAllString.IsNullOrEmpty()方法;

指示指定的字符串是否爲空或空字符串。

s.RemoveAll(str => string.IsNullOrEmpty(str)); 

這裏是一個DEMO

+3

+1爲小寫「s」爲'string' :) – nawfal

+0

不是。 OP同時使用:)只是個人偏好.. :) – nawfal