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

如何将多个简单.cs文件合并为单个.cs文件,将using置于顶部以编译

解决C#多文件合并时的using语句顺序问题(适配CodinGame)

问题分析

我完全懂你的痛点——手动把多个类揉进一个文件适配CodinGame确实够烦的,尤其是还得处理using语句的顺序坑。你之前用的PowerShell命令直接把所有内容硬拼起来,自然会出现using插在类定义中间的情况,触发CS1529错误太正常了,毕竟C#明确要求所有using必须放在命名空间(或全局)范围内的其他元素之前。

解决方案思路

要搞定这个问题,核心就是把using和类代码分开处理:

  • 第一步:从所有源文件里提取所有唯一的using语句,集中放在合并文件的最顶部
  • 第二步:把每个源文件里的using删掉,只留类、方法这些核心代码,再把这些干净的代码依次追加到合并文件里

PowerShell实现脚本

下面是可以直接用的PowerShell脚本,完美适配你的简单类场景:

# 1. 提取所有唯一的using语句(自动去重,保留首次出现的顺序)
$uniqueUsings = Get-ChildItem -Filter *.cs | Get-Content | 
    Where-Object { $_ -match '^using\s+.*;\s*$' } | 
    Select-Object -Unique

# 2. 提取每个文件中去掉using后的代码内容
$cleanedCode = Get-ChildItem -Filter *.cs | ForEach-Object {
    Get-Content $_.FullName | 
        Where-Object { $_ -notmatch '^using\s+.*;\s*$' }
}

# 3. 合并内容到目标文件(先写using,再写类代码)
$uniqueUsings | Out-File -Path "bigBadFile.cs" -Encoding UTF8
$cleanedCode | Out-File -Path "bigBadFile.cs" -Encoding UTF8 -Append

效果验证

用你提供的示例文件测试,最终生成的bigBadFile.cs会是这样的:

using System.Collections.Generic;
using System;
using System.Linq;
using System.Text;
public class GameData {
    public GameData(int width, int height) { ... }
    public int Width { get; set; }
    public int Height { get; set; }
    public List<int> List { get; set; }
    ...
}
public class Player {
    private static string[] inputs;
    private static bool isFirstTurn = true;
    public static StringBuilder MoveBuilder;
    public static GameData Game;
    static void Main() { ... }
}

完全符合C#语法规范,直接粘去CodinGame就能编译运行。

额外提醒

如果你的代码里有extern alias声明(虽然你的场景大概率没有),需要把这些声明放在using语句之前,脚本可以稍作调整适配,但对你的简单类来说,上面的脚本已经足够好用了。

内容的提问来源于stack exchange,提问作者Lech Osiński

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:28:10