関連する質問で、私のチームは (できれば) LINQ の使用を開始しようとしています。匿名型を利用したいと考えています。VB.NET の Option Strict (プロジェクトの全期間を通じて使用してきました) と新しい Option Infer ディレクティブを組み合わせる最良の方法は何ですか?
2 に答える
Option Strict とOption Inferは競合しないので、両方をオンにしても害はないと思います。
スタイル ガイドとして、各クラス ファイルの先頭に Option Strict、Explicit、および Infer を配置することを好みます。これにより、プロジェクトまたは IDE 設定の違いによる問題を防ぎ、使用する設定を明確にします。
Option Strict は Option Infer なしで使用できますが、結果の IL に違いが生じる可能性があるため、Option Strict なしで Option Infer を使用しないでください。
次のコード行を検討してください。
txtBox.Text = If(str="", Nothing, CDate(str))
Option Strict Off と Option Infer Off を使用すると、次のようになります。
txtBox.Text = CStr(If(str="", Nothing, CType(CDate(str), Object)))
str="" の場合、txtBox.Text は Nothing/空の文字列に設定されます。
Option Infer On で Option Strict Off を使用すると、次のようになります。
txtBox.Text = Cstr(If(str="", CDate(Nothing), CType(CDate(str), Object)))
CDate(Nothing) = Date.MinValue など txtBox.Text = "01/01/0001"
Option Strict はコードをコンパイルしないようにすることしかできず、Option Infer はその意味を変えることができます。Infer が良いことではないというわけではありませんが、一般的には良いことですが、注意すべき点がいくつかあります。
元のコードは次のように記述できます。
txtBox.Text = Cstr(If(str="", Nothing, CDate(str)))
その場合、Option を有効にしても Option Strict は保存されません。推測しますが、Strict のないコード ベースでは元のバージョンの可能性が高くなります。