我最终在列表中添加了一堆int(名为“listInts”)。

那不应该让任何人感到惊讶。

我的问题是我不希望在其中有任何负数,但是有可能会有三个,特别是-1,-2和-3。

我可以通过以下方式笨拙地删除它们:

if (listInts.Contains(-1) {
    int i = listInts.IndexOf(-1);
    listInts.Remove(i);
    // etc.
}

...但是我知道这比一整只山猫的气味更臭。

有什么更好的方法?

最佳答案

我将使用LINQ:

listInts = listInts.Where(i => i >= 0).ToList();

根据将如何使用它,您还可以避免ToList()调用而不重新保存值:
var positiveInts = listInts.Where(i => i >= 0);

这仍然可以让您根据需要进行枚举。

如果您需要更改列表, List<T>.RemoveAll 实际上是一种更有效的方法:
listInts.RemoveAll(i => i < 0);

但是,我不喜欢这种方法,因为它是一种会产生副作用的方法,并且如果您使用的是其他LINQ扩展方法,则往往会造成混淆(从而妨碍维护)。

10-06 00:28