使用另一个方法调用列出 RemoveAll
List RemoveAll with another method call
因此,我尝试遍历列表并从列表中删除项目并销毁游戏对象,所以起初我这样做了:
Pooler.Remove()
protected static void Remove(GameObject obj){
PoolerItem p = (
from item in pool
where obj == item.gameObject
select item
).FirstOrDefault();
pool.Remove(p);
GameObject.Destroy(p.gameObject);
}
遍历列表
foreach(PoolerItem p in pool.Where(x => x.poolName == "cube")){
if(totalItems > minPoolSize && p.inactiveLifeSpan > 0 && !p.gameObject.activeSelf && Time.time - p.disableTime >= p.inactiveLifeSpan){
Pooler.Remove(p);
}
}
我收到一条错误消息,基本上是 您可以从循环访问的列表中删除项目
好的,有道理。所以我环顾四周,发现我应该使用 RemoveAll
所以我为此创建了代码并将其替换为我的 foreach,如下所示:
pool.RemoveAll(
p => p.poolName == entry.poolGroupName
&& p.inactiveLifeSpan > 0
&& !p.gameObject.activeSelf
&& Time.time - p.disableTime >= p.inactiveLifeSpan
);
唯一缺少的是 Pooler.Remove
中的这一行 GameObject.Destroy(p.gameObject);
。我怎样才能用 pool.RemoveAll()
实现它?
你可以使用语句 lambda 而不是表达式,你可以在其中做任何你想做的事:
pool.RemoveAll(
p => {
if(p.poolName == entry.poolGroupName &&
p.inactiveLifeSpan > 0 &&
!p.gameObject.activeSelf &&
Time.time - p.disableTime >= p.inactiveLifeSpan)
{
GameObject.Destroy(p.gameObject);
return true;
}
return false;
});
因此,我尝试遍历列表并从列表中删除项目并销毁游戏对象,所以起初我这样做了:
Pooler.Remove()
protected static void Remove(GameObject obj){
PoolerItem p = (
from item in pool
where obj == item.gameObject
select item
).FirstOrDefault();
pool.Remove(p);
GameObject.Destroy(p.gameObject);
}
遍历列表
foreach(PoolerItem p in pool.Where(x => x.poolName == "cube")){
if(totalItems > minPoolSize && p.inactiveLifeSpan > 0 && !p.gameObject.activeSelf && Time.time - p.disableTime >= p.inactiveLifeSpan){
Pooler.Remove(p);
}
}
我收到一条错误消息,基本上是 您可以从循环访问的列表中删除项目
好的,有道理。所以我环顾四周,发现我应该使用 RemoveAll
所以我为此创建了代码并将其替换为我的 foreach,如下所示:
pool.RemoveAll(
p => p.poolName == entry.poolGroupName
&& p.inactiveLifeSpan > 0
&& !p.gameObject.activeSelf
&& Time.time - p.disableTime >= p.inactiveLifeSpan
);
唯一缺少的是 Pooler.Remove
中的这一行 GameObject.Destroy(p.gameObject);
。我怎样才能用 pool.RemoveAll()
实现它?
你可以使用语句 lambda 而不是表达式,你可以在其中做任何你想做的事:
pool.RemoveAll(
p => {
if(p.poolName == entry.poolGroupName &&
p.inactiveLifeSpan > 0 &&
!p.gameObject.activeSelf &&
Time.time - p.disableTime >= p.inactiveLifeSpan)
{
GameObject.Destroy(p.gameObject);
return true;
}
return false;
});