LoginSignup
1
4

More than 1 year has passed since last update.

VB.Net を C# に変換した。(有償ツール $149)

Last updated at Posted at 2021-09-26

概要

VB.Net のソースを、C# に移行するを社内で実施中です。
ようやくやり方がまとまってきたので久しぶりに書いてみました。
さて、過去の記事だったり、日本語の記事ではほとんど SharpDevelop を使った方法の紹介がほとんどでしたが、ちょっと前に有償ツールですが、Instant C# というツール($149)を見つけました。

今まで使用していた、Sharp Develop よりはるかに精度が高い。多少は手で直さないといけないですが、SharpDevelop に比べると数倍は精度が高い。
画面はこんな感じ。
移行元プロジェクトのプロジェクトか、ソリューションを選んで出力先フォルダを選んでコンバートするだけ。
instant.png

画面の右側に、プロジェクトごとに結果の概要が表示される。
ここでは、note, warning, ToDo の3種類の個数がされます。

これらのコメントはINSTANT C#という文言で検索するとその箇所が分かりますが、これらは違和感のある変換をしているとはいえ、ちゃんと変換してくれてるので、無視してもほとんど問題なし。これを追うよりも、ツールが追えていないないエラーの方が大変です。
ただ、これらも Visual Studio で開いてエラーをつぶしていけばオーケーです。

個人的なオススメ使用法。

  1. 一度ツールを当てる。
  2. Visual Studio で開いてエラーを見る。
  3. 元のソースで直した方がよさそうなところを直しておく。
  4. 必要に応じで、1~3を繰り返す。
  5. Visual Studio でエラーつぶす。

1~4であらかたつぶしておくと、慣れてくると5の作業は1日で1万行ぐらいできるイメージ。

事前にやっておいた方がいいこと

  1. このツールでは、ソースが Shift-JIS だと文字化けするので事前に UTF-8 に変換しておいた方がいいです。昔の Visual Studio でなければ大丈夫ですが。こちらに上げておきました。

  2. メソッドに「()」を付けておいた方がいい。特に、ToString はかっこを付けてないことが多かったので、正規表現で一括で置換しました。こんな感じ。元.ToString([^(]|$)、後.ToString()$1。よくある関数はこんな感じで一括で変換するコードを書いた方が楽かも。

VB.Net
not good: x.ToString
good:     x.ToString()

主なひっかかりどころ

c# に慣れてる人には当たり前かもしれないけど、主な移行作業。

  1. しばしばデリゲートでエラーになるので、new Action( で囲む。
  2. 配列のインデックス参照の "[","]" が普通のカッコのままなのを直す。
  3. Enumintの変換にキャストが必要になる。これを使っていると案外面倒。
  4. VB.Net でいうと、Char と String のキャストも自動でなくなるので、キャストが必要。"a"c == "a"みたいなのがエラーになっちゃう。
  5. (たぶん)C# では、System.IO.File を参照するのに using System; ってしても、IO.Fileで参照できなくて、System.IO.Fileと書かないといけない。
  6. ほかにもいろいろありますが、SharpDevelop で、VB.Net を C# に変換してみた( その1 )で書いていたのはほとんど、ツールが解決してくれてありがたい。
  7. SharpDevelop で、VB.Net を C# に変換してみた( その2 )で書いていたのもけっこう変換してくれる。

C#に移行して

いろいろ手がかかって面倒でしたが、すでに数十個のプロジェクトを VB.Net から C# に移行しました。慣れてくるとだいぶ早く変換できるようになってきます。
グローバル関数も、using static Class1.Module1;って書いてあげればC#でも使えたのでだいぶよくなってきました。

やっぱり、有償ツールはいいですねって感じ。

1
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4