我正在尝试一种非常简单的扩展方法,该方法只是从列表中删除空值。
它看起来像这样:
private static List<T> RemoveNulls<T>(this List<T> list) where T : new()
{
List<T> newList = list.FindAll(x => x != null);
return newList;
}
真的很简单。我这样称呼它:
foundNeighbors.RemoveNulls();
但是,有时我仍然会返回一个包含null的列表。这应该是不可能的吗?我是否缺少有关扩展方法的内容?
答案 0 :(得分:4)
您的扩展方法创建并返回一个没有空值的全新列表,它不会变异调用对象。
改为使用它:
foundNeighbors = foundNeighbors.RemoveNulls();
答案 1 :(得分:4)
这是个人喜好,但我可以建议
public static class ListExt
{
public static void RemoveNulls<T>(this List<T> list)
where T : new()
{
list.RemoveAll(t => t == null);
}
}
它不使用任何额外的内存,并且仅更改list
实例,这是我在问题和评论中看到的,这是您要实现的目标。
以后您可以根据需要使用它
foundNeighbors.RemoveNulls();
就像我说的那样,这将直接更改foundNeighbors
。
@Edit:就像其他人注意到的那样,如果您希望它更快(O(N)),则应改用RemoveAll
。