我正在寻找一种方便的方法来删除带有空字符串的列表项作为其值。
我知道我可以在加载到列表之前检查每个字符串是否为空。
List<string> items = new List<string>();
if (!string.IsNullOrEmpty(someString))
{
items.Add(someString);
}
然而,这似乎有点麻烦,特别是如果我有很多字符串要添加到列表中。
或者,我可以加载所有字符串而不管是否为空:
List<string> items = new List<string>();
items.Add("one");
items.Add("");
items.Add("two")
然后迭代列表,如果找到空字符串,则删除它。
foreach (string item in items)
{
if (string.IsNullOrEmpty(item))
{
items.Remove(item);
}
}
这些是我唯一的两个选择,也许Linq中有一些东西?
感谢您提供任何帮助。
答案 0 :(得分:5)
尝试:
items.RemoveAll(s => string.IsNullOrEmpty(s));
或者您可以使用where
var noEmptyStrings = items.Where(s => !string.IsNullOrEmpty(s));
答案 1 :(得分:1)
作为Darren答案的延伸,您可以使用扩展方法:
/// <summary>
/// Returns the provided collection of strings without any empty strings.
/// </summary>
/// <param name="items">The collection to filter</param>
/// <returns>The collection without any empty strings.</returns>
public static IEnumerable<string> RemoveEmpty(this IEnumerable<string> items)
{
return items.Where(i => !String.IsNullOrEmpty(i));
}
然后用法:
List<string> items = new List<string>();
items.Add("Foo");
items.Add("");
items.Add("Bar");
var nonEmpty = items.RemoveEmpty();
答案 2 :(得分:1)
在将字符串添加到列表之前检查字符串总是比从列表中删除字符串或创建一个全新的字符串更加麻烦。您试图避免字符串比较(实际检查其空白,执行速度非常快)并通过列表复制替换它,这将对您的应用程序的性能产生强烈影响。如果您只能在将字符串添加到列表之前检查字符串 - 请执行此操作,并且不要复合。