从字符串数组中删除所有空元素

42

我有这个:

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

我想快速地从中删除所有空元素(""),最好使用LINQ而不是foreach语句,因为后者会让代码看起来很丑陋。


2
几乎是重复的问题:如何从通用列表中删除“空”项? - Mark Hurd
3
顺便提一下,那不是一个“string”数组,而是一个列表。 - Tim Schmelter
4个回答

67
你可以使用 List.RemoveAll 方法:

C#


C#

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

VB.NET

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

17
在这种情况下,我只需写s.RemoveAll(String.IsNullOrEmpty);,不需要使用lambda表达式。 - Paolo Moretti
2
@PaoloMoretti:+1 好观点。但至少在 VB.NET 中,它并不真的更短:s.RemoveAll(AddressOf String.IsNullOrEmpty),而且 lambda 表达式表明可以轻松修改它。在我看来,使用 lambda 更易读。 - Tim Schmelter
为什么它返回的是已删除元素的数量而不是清空列表?这个 int count = s.RemoveAll(string.IsNullOrEmpty); 是有效的,但是 List<string> list = s.RemoveAll(string.IsNullOrEmpty); 不是。 - Jan Chalupa
因为创建一个包含已删除元素的新列表比仅返回已删除元素的计数要昂贵得多。请注意,该方法应仅删除元素,返回值仅是可提供的信息,因为它已经可用。如果您需要获取匹配元素的列表,请查看List.FindAll。 - Tim Schmelter

14

使用 List.RemoveAll 方法结合 String.IsNullOrEmpty() 方法进行检查;

指示指定的字符串是 null 还是 Empty 字符串。

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

这里有一个演示


11
s = s.Where(val => !string.IsNullOrEmpty(val)).ToList();

4
应该是 s = s.Where(val => !string.IsNullOrEmpty(val)).ToList();,原始类型是 List<string>,需要确保它仍然是一个 List<string> - MethodMan
这种方法可能可行IList。IList没有RemoveAll。 - liang

0
我写了下面的代码来删除空值。
List<string> s = new List<string>{"", "a", "", "b", "", "c"};
s = s.Where(t => !string.IsNullOrWhiteSpace(t)).Distinct().ToList();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接