从集合中删除所有null
本文关键字:null 删除 集合 | 更新日期: 2023-09-27 18:11:36
我必须处理从我无法控制的数据源向我的应用程序抛出的数据集合。其中一些集合包含空值,我宁愿在它们碰到我的代码时立即将其过滤掉,而不是将空值检查代码分散到各处。我想以可重用的通用方式做到这一点,并编写了以下方法:
public static void RemoveNulls<T>(this IList<T> collection) where T : class
{
for (var i = 0; i < collection.Count(); i++)
{
if (collection[i] == null)
collection.RemoveAt(i);
}
}
我知道在具体的列表类中有RemoveAll()
方法,可以这样使用:
collection.RemoveAll(x => x == null);
但是很多返回类型是基于接口的(IList/IList…)而不是具体的类型
您可以使用LINQ:
创建一个没有null的集合副本,而不是从源集合中删除null。collection.Where(i => i != null).ToList();
扩展方法可用于任何IEnumerable,包括IList。
你的方法不起作用,因为删除一个元素会导致所有后续元素的索引被递减。如果你不想要Linq解决方案(这似乎是最简单的:看看@alex的答案),你应该向后迭代。
public static void RemoveNulls<T>(this IList<T> collection) where T : class
{
for (var i = collection.Count-1; i >= 0 ; i--)
{
if (collection[i] == null)
collection.RemoveAt(i);
}
}