List<T> 的通用扩展方法不删除空值

Generic Extension Method of List<T> does not remove nulls

我正在尝试制作一个非常简单的扩展方法,它只从列表中删除空值。

看起来像这样:

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

但有时我仍然 return 一个包含空值的列表。这应该是不可能的吧?我是否缺少有关扩展方法的内容?

您的扩展方法创建并 returns 一个没有空值的全新列表,它不会改变调用对象。

改为这样使用:

foundNeighbors = foundNeighbors.RemoveNulls();

这是一个偏好问题,但我可以建议

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