You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于allhuman.RemoveAll(s => s == null)含义及等效代码替换的疑问

代码含义与替换分析

一、allhuman.RemoveAll(s => s == null)的含义

这是C#中List<T>等集合类型的内置方法,作用是一次性移除集合中所有符合指定条件的元素:

  • s => s == null是Lambda表达式,用来定义筛选规则——匹配所有值为null的元素;
  • RemoveAll方法内部会高效遍历整个集合,批量移除所有满足条件的元素,不会出现索引错位的问题,性能和代码简洁性都优于手动循环。

二、能否用给出的for循环替换?

不能直接替换,因为这个for循环存在逻辑漏洞:
当执行allhuman.RemoveAt(i)删除元素后,集合的元素会向前移位,同时Count值减1,但循环变量i仍会自增,导致跳过被删除元素的下一个元素。比如集合为[null, null, "张三"]时:

  1. i=0删除第一个null,集合变为[null, "张三"];
  2. i自增到1,此时判断的是allhuman[1](即"张三"),不会删除,循环结束,但集合中剩余的null未被处理。

如果想用for循环实现相同效果,需要从后往前遍历,避免索引错位:

for (int i = allhuman.Count - 1; i >= 0; i--)
{
    if (allhuman[i] == null)
    {
        allhuman.RemoveAt(i);
    }
}

内容的提问来源于stack exchange,提问作者利维坦

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:48:26