Java转换为C#的自动翻译

C# 和 .NET 拥有一个很棒的生态系统,其中有大量的库和代码片段。但有时你会得到另一种语言的罕见代码片段。
我们正处于 ChatGPT 和大语言模型的年代:ChatGPT 如何将Java转换为C#?我用 GPT 3.5 尝试过:

  • 基础类:翻译编译。它做了一些 C# 化处理,但看起来仍然是 Java 式的。
  • 注释:近乎完美的翻译。但它注意到这是一个教程片段,因此它也更改了响应文本。
  • Streams to LINQ:第一个无法编译的代码。主要是因为它将其转换为方法并忘记返回值。实际的代码片段是正确的。
  • 泛型/包装类型示例:有趣的是,Chat GPT 3.5 搞砸了这个示例。它编译了,但使用了 .NET 1.0 ArrayList 并错过了可空类型的细微差别。

总的来说:对于小片段,请使用 ChatGPT 等。他们非常擅长这项任务。但是,您需要检查代码。它会错过细微差别。另外,对于更复杂的代码,它会发明不存在的 API。

有多种非人工智能翻译方法,更加精确可靠。这里有一些:

  • IKVM.NET . 跳过对 C# 的转换,直接将 Java 代码编译为 .NET 程序集。请注意,它将提供编译为 .NET 程序集的整个 Java 库 =)。我推荐将此作为您的第一选择。它仅适用于 Java 8.0 代码库。幸运的是,大量 Java 代码仍然兼容 Java 8.9。
  • Sharpen (谷歌搜索,各个分支)。Mono 项目和(现已失效)db4o 数据库使用它来将 Java 代码转换为 C#。它晦涩难懂,无人维护,几乎没有文档记录,并且需要付出巨大的努力。然而,对于大型代码库,它可能仍然是一个选择:它翻译大型代码库,并有各种策略来处理差异。它也处于 Java 8.0 级别,但可能比 IKVM.NET 更容易升级。
  • Java 到 CSharp。我从来没有尝试过这个。似乎首先编译 Java 代码,使用 IKVM.NET 将其转换为 .NET 程序集,然后使用 Roslyn 将其反编译回 C#。