从集合中删除所有空值

时间:2013-05-01 15:19:12

标签: c# .net collections

我不得不处理从我的控件中的数据源抛出我的应用程序的数据集合。其中一些集合包含空值,我宁愿在它们点击我的代码时过滤掉它,而不是在整个地方散布空检查代码。我想以可重用的通用方式执行此操作并编写此方法来执行此操作:

    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);
        }
    }

我知道具体的List类中有RemoveAll()方法可以使用,如:

collection.RemoveAll(x => x == null);

但是很多返回类型都是基于接口的(IList / IList ...)而不是具体的类型。

2 个答案:

答案 0 :(得分:14)

您可以使用LINQ创建一个没有空值的集合副本,而不是从源集合中删除空值:

collection.Where(i => i != null).ToList();

扩展方法适用于任何IEnumerable,包括IList。

答案 1 :(得分:4)

您的方法无效,因为删除元素会导致所有后续元素的索引递减。如果您不想要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);
    }
}
相关问题