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

如何将列表中每个元素移除并推入栈中?C#代码实现咨询

解决方法:正确实现从列表移除元素并推入栈

首先,咱们先看看你代码里的两个关键问题:

  1. 循环索引越界+元素遗漏:你用for (int i = 0; i < lines.Count; i++)循环,但每次RemoveAt(i)会让列表长度减1,后面的元素会往前挪一位。比如i=0移除第一个元素后,原来的第二个元素现在在索引0,但i会自增到1,直接跳过了它;到后期i还没到原来的Count,就会超出当前列表的长度,触发索引越界异常。
  2. 错误的Push内容:meStack.Push(pali[i])是把字符串pali的第i个字符推到栈里,而不是完整的字符串,这和你的需求不符。

下面给你两种符合需求的实现方式:

方式一:严格按照“移除列表每个元素”的需求实现

这种方式会逐步清空列表,每次移除第一个元素并推入栈:

string filePath = @"C:\Users\Me\Desktop\Palindromes\palindromes.txt";
List<string> lines = File.ReadAllLines(filePath).ToList();
var meStack = new Stack<string>();

// 循环直到列表为空
while (lines.Count > 0)
{
    // 移除列表第一个元素,拿到完整字符串
    string pali = lines.RemoveAt(0);
    // 将完整字符串推入栈
    meStack.Push(pali);
}

这个方法的好处是完全符合你“移除列表中每个元素再推入栈”的操作逻辑,不会出现索引问题,也能保证每个完整的行都被推入栈。

方式二:更简洁的实现(如果不需要保留原列表操作的过程)

如果你的核心需求只是把文件的所有行推入栈,不需要显式地从列表中移除元素的过程,那可以直接用Stack的构造函数一步完成,效率更高:

string filePath = @"C:\Users\Me\Desktop\Palindromes\palindromes.txt";
// 直接将文件行的数组传入Stack构造函数,自动完成入栈
var meStack = new Stack<string>(File.ReadAllLines(filePath));

这种方式省去了中间的List转换和移除操作,代码更简洁,性能也更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:17:43