2012-10-24 8 views
6

私は最近c#チームからvb.netチームに切り替えました。私が答えを見つけることができなかったことの1つは、コンパイルエラー/オプションの違いです。私に説明させてください。なぜVB.NETでエラーが発生しない

C#では、以下のようなテンプレート化されたクラスに無効な型を渡そうとすると、デフォルト設定を使用してコンパイル時エラーが発生します。ここでは、文字列型のAnimalを作成し、その後、コンパイルエラーの原因となるdatetimeを渡します。

IAnimal<string> animal = new Animal<string>(); 
animal.SetTrainer(DateTime.Now); 

は、私が「strictオプション」とvb.netで同じコンパイル時エラーになります知っています。しかし、同じファイルには "Option Strict"でコンパイルされないレガシー(VB)コードがたくさんあります。どのようなオプションがありますか?私はこれを考えて:

  1. "Option Strict"に切り替え、すべてのエラーを修正します。しばらく時間がかかり、作業コードが壊れる可能性があります。
  2. おそらくジェネリックのコンパイル時間チェックを保証する別の方法があります。すべてのジェネリック薬はかなり新しいので、多分それは常にこれを強制する方法があります。

事前

答えて

6

のおかげでダブルあなたのプロジェクトをクリック - > [マイプロジェクト。

後藤コンパイルと今、あなたは、いくつかの設定を変更することができWarningconfiguration

を探します。

  • の暗黙的なキャスト
  • 後期

は彼らにエラーが、警告をしない結合。

コンパイル時エラーは発生しませんが、少なくとも警告が表示されます。

別の解決策は、クラスを部分クラスにしてコードを新しいファイルに移動することです。ファイルごとにOption Strict/Option Explicitを設定することができます。

+5

+1非常に同意します。しかし、これについて気にするなら、**プロジェクトレベルでOption Strictを有効にして**オプションを各ファイルに追加する**オプションなしではコンパイルされません。ステップバイステップで、既存のコードをリファクタリングします。 –

+0

これについてあなたの考えを共有してくれてありがとう。私は私のチーム – Flodpanter

+0

@アドリアーノ、+1と議論します - それはおそらく最高の解決策です。 –

3

"Option Strict"に切り替え、すべてのエラーを修正してください。しばらく時間がかかり、作業コードが壊れる可能性があります。

はい、そうです。それはあなたが正気のままになるのを助けます。

ポップアップするほとんどのエラーは、簡単に修正できる簡単なキャストの問題です(ここではCIntToString() ...)。

ファイルレベルでOption Strict Onを有効にすることができるので、ソリューション全体またはプロジェクトを一度に修正する必要はありません。あなたはそれに触れなければならないので、すべてのファイルを修正するための良い習慣にしてください。

これは常に可能性はありませんが、あなたはまた、単に変更を壊すことなく、別のファイルに大きくOption Strict Onに依存しているコード(例えばCOMもの)を移動することができます。

+0

ありがとうございます。私は「Option Strict」が道のりであることに全く同意します。今すぐ私のチームを説得しなければなりません:-) – Flodpanter

+0

+1それぞれのエラーを見つけたら修正します。 – MarkJ

関連する問題