C#读取CSV时Skip(2)为何多跳过一行?是否应改用Skip(1)?
问题解答
核心结论
是的,仅需跳过表头时,你应该使用Skip(1),而不是Skip(2)。
原因解释
LINQ的Skip(n)方法的作用是跳过序列的前n个元素:
- 你的CSV文件首行是表头,对应序列的第1个元素(索引0)。
- 使用
Skip(2)会直接跳过前两行:第1行(表头)+第2行(第一行玩家数据),所以最终读取的玩家数量会比预期少1,这就是你遇到的问题。 - 改用
Skip(1)只会跳过表头(第1个元素),从第2行(第一行玩家数据)开始处理,刚好符合你的需求。
修正后的代码
将Main方法中的Skip(2)替换为Skip(1)即可:
static void Main(string[] args) { foreach (var item in File.ReadAllLines("arsenal_players.csv").Skip(1)) { Players.Add(new Player(item)); } Console.WriteLine("Players count: " + Players.Count); var forwards = Players.Where(x => x.Position == "Forward"); foreach (var p in forwards) { Console.WriteLine(p.Name + " - " + p.Rating); } }
额外提示
直接用Split(';')处理CSV存在隐患,比如字段内容包含被引号包裹的分号时,会出现解析错误。如果需要更健壮的CSV解析逻辑,推荐使用专门的CSV处理库(如CsvHelper);如果是简单场景,上述修改已经能解决你的核心问题。
内容的提问来源于stack exchange,提问作者Fryback
相关产品推荐
相关产品推荐

