【发布时间】:2015-05-15 20:53:51
【问题描述】:
我不得不处理从我无法控制的数据源向我的应用程序抛出的数据集合。其中一些集合包含空值,我宁愿在它们命中我的代码时立即过滤掉它们,而不是将空值检查代码分散在各处。我想以可重用的通用方式执行此操作,并编写了此方法来执行此操作:
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? -
问题是什么?
-
您编写的代码将不起作用,因为删除一个项目会将所有后续元素的索引向下移动 1。每次删除 null 时,您的代码都会跳过检查下一个元素。
-
为什么投反对票!?!??
-
这里的人都这么书呆子……
标签: c# .net collections