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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 04:22:27