从集合中删除所有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…)而不是具体的类型

从集合中删除所有null

您可以使用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);
    }
}