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
。
我正在尝试制作一个非常简单的扩展方法,它只从列表中删除空值。
看起来像这样:
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
。