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

C#操作Animal数组调用RemoveAt无法删除元素且出现多余1开头行如何解决

问题原因及修复方案

问题根源

  • 执行顺序错误:打印操作在删除操作之前执行,你输出的是删除前的数组内容,自然看不到删除效果。
  • 删除操作未生效:my_animal.ToList()会生成一个和原数组内容一致的新List副本,你对这个副本执行RemoveAt不会修改原my_animal数组,也没有把修改后的内容赋值回原变量,等于删除操作完全没有作用到实际使用的数组上。
  • 计数变量未同步:你遍历用的cont_animal是自行维护的有效元素计数,删除元素后没有将该值减1,就算后续再打印还是会遍历原来的长度。
  • 多余的空对象赋值:你开头给my_animal[idxtoRemove]赋值空Animal对象的操作完全多余,会导致打印时对应位置出现一行属性全为默认值的记录,也就是你看到的多余行。

修复代码

private void retirerUnAnimalDeListe(int idxtoRemove)
{
    // 先执行删除操作
    var tolist = my_animal.ToList();
    tolist.RemoveAt(idxtoRemove);
    // 将修改后的集合回写给原数组变量
    my_animal = tolist.ToArray();
    // 同步更新有效元素计数
    cont_animal = my_animal.Length;

    // 再打印删除后的结果
    for (int i = 0; i < cont_animal; i++)
    {
        Console.Write(i + "\t");
        Console.Write("{0,-10}", my_animal[i].m_type + "\t");
        Console.Write("{0,-10}", my_animal[i].m_name + "\t");
        Console.Write("{0,-10}", Convert.ToString(my_animal[i].m_age + "\t"));
        Console.Write("{0,-10}", Convert.ToString(my_animal[i].m_poids + "\t"));
        Console.Write("{0,-10}", my_animal[i].m_color + "\t");
        Console.Write("{0,-10}", my_animal[i].m_owner + "\t");
        // 增加换行避免所有行挤在一起
        Console.WriteLine();
    }
}

优化建议

如果你需要频繁对集合做增删操作,建议直接用List<Animal>类型替代数组,不需要每次手动做数组和List的转换,性能更优,代码也更简洁。

内容的提问来源于stack exchange,提问作者Alen Husic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:57:03