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

移除列表中满足索引倍数条件的元素:Linq实现报错求助

错误原因解析
  • List<T>.RemoveAll()方法的返回值是int类型,代表被成功移除的元素总数,而你的函数声明要求返回List<int>类型,这就导致了类型不匹配的编译错误CS0029。
  • 另外代码还存在逻辑bug:xs.IndexOf(s)会返回列表中第一个等于s的元素索引,如果列表存在重复元素,后续相同元素会错误使用第一个元素的索引,导致判断逻辑失效。
正确的Linq实现方式

要保留不符合「元素是其索引的倍数」条件的元素,可以利用Linq带索引参数的Select重载,同时获取元素和对应索引,再通过Where过滤,最后转成List<int>:

public static List<int> MultipleOfIndex(List<int> xs) =>
    xs.Select((num, idx) => new { Num = num, Index = idx })
      .Where(item => 
          // 处理索引为0的边界情况:0不能作为除数,这里默认保留索引0的元素,可按需调整
          item.Index == 0 || item.Num % item.Index != 0)
      .Select(item => item.Num)
      .ToList();

逻辑说明

  1. Select((num, idx) => ...):遍历列表时同时获取元素num和它的索引idx。
  2. Where过滤:
    • 索引为0时直接保留,避免除以0的异常;
    • 索引不为0时,仅保留元素不是索引倍数的项。
  3. 最后通过Select提取元素值并转成List<int>返回。

如果需要调整索引0的处理逻辑(比如元素为0时判定为满足条件并移除),可以修改Where的判断:

.Where(item => 
    !(item.Index != 0 && item.Num % item.Index == 0))

内容的提问来源于stack exchange,提问作者Alberto Andrenucci

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:32:11