gpt4 book ai didi

c# - 您可以在 C# 中循环访问 List<> 中的项目吗

转载 作者:太空狗 更新时间:2023-10-29 23:53:55 25 4
gpt4 key购买 nike

您可以在遍历 List<> 的同时从中删除一个项目吗?这行得通吗,或者有更好的方法吗?

我的代码:

foreach (var bullet in bullets)
{
if (bullet.Offscreen())
{
bullets.Remove(bullet);
}
}

-edit- 对不起大家,这是一个 silverlight 游戏。我没有意识到 silverlight 与 Compact Framework 不同。

最佳答案

bullets.RemoveAll(bullet => bullet.Offscreen());

编辑:要使其在 silverlight 中按原样工作,请将以下扩展方法添加到您的项目中。

List<T>.RemoveAll ,此算法是 O(N),其中 N 是列表的长度,而不是 O(N*M),其中 M 是从列表中删除的元素数。因为它是与 RemoveAll 具有相同原型(prototype)的扩展方法在非 Silverlight 框架中找到的方法,将在可用时使用内置的方法,而这个方法无缝地用于 silverlight 构建。

public static class ListExtensions
{
public static int RemoveAll<T>(this List<T> list, Predicate<T> match)
{
if (list == null)
throw new NullReferenceException();

if (match == null)
throw new ArgumentNullException("match");

int i = 0;
int j = 0;

for (i = 0; i < list.Count; i++)
{
if (!match(list[i]))
{
if (i != j)
list[j] = list[i];

j++;
}
}

int removed = i - j;
if (removed > 0)
list.RemoveRange(list.Count - removed, removed);

return removed;
}
}

关于c# - 您可以在 C# 中循环访问 List<> 中的项目吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1541777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com