0

我通常不在 Windows 上开发,但最近我不得不用 C# 做一些工作,并且我正在努力解决一些事情。我一直在浏览 MSDN,但找不到我要找的东西。

无论如何,据我所知,一个 List 被索引,就像一个数组。但是,如果我使用 RemoveAt() 删除了位置 X 的一个项目,它会移动所有项目,以便一个新项目现在填充位置 X?还是位置 X 只是空的?

如果您有一个字符串或整数列表,那么使用 Remove() 似乎也相当简单,但是如果您有一个对象列表,是否可以使用 Remove() 删除对象字段具有特定值的项目?

例如

假设我有列表,其中每个汽车对象都有品牌、型号和颜色。

我可以做一些类似的事情吗

 cars.Remove(cars.color="red");

我确信这是非常错误的,但我来自 PHP 背景,所以我现在对很多语法感到很困惑。

谢谢

4

3 回答 3

5

List<T>不会有洞。
删除一个项目会将所有后续项目上移一个。

RemoveAll()您可以通过使用 lambda 表达式调用来删除所有符合条件的项目:

list.RemoveAll(o => o.Color == "Red");
于 2012-11-04T22:29:02.767 回答
3

如果我使用 RemoveAt() 在位置 X 删除了一个项目,它会移动所有项目,以便一个新项目现在填充位置 X?

是的。

如果您有一个对象列表,是否可以使用 Remove() 删除对象字段具有特定值的项目?

是的,使用RemoveAll方法:

cars.RemoveAll(c => c.color == "red");
于 2012-11-04T22:29:43.327 回答
0

当物品被移除时,该位置被下一个占据。由于列表是集合,您可以将 lambda 与 remove all 一起使用

Cars.RemoveAll( x=> x.colour == "red"); 

将删除所有重新汽车。

于 2012-11-04T22:32:28.620 回答