我不得不处理来自我的控制的数据源在我的应用程序中抛出的数据集合。其中一些集合包含空值,我希望在它们打开我的代码时立即将其过滤掉,而不是将空值检查代码散布到整个地方。我想这样做在一个可重用的通用方式,并写了这个方法来做到这一点:删除集合中的所有空值
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 ...)而不是具体的类型。
请您详细说明为什么不能使用'RemoveAll'? – 2013-05-01 15:21:07
什么是问题? – 2013-05-01 15:22:04
您编写的代码将不起作用,因为删除项目会将所有后续元素的索引向下移动1.每次删除空值时,您的代码都会跳过检查下一个元素。 – 2013-05-01 15:25:59