Как лучше всего сочетать Option Strict VB.NET и новые директивы Option Infer? - PullRequest
10 голосов
/ 11 октября 2008

В связанном вопросе моя команда собирается (надеюсь) начать использовать LINQ, и я хотел бы воспользоваться анонимными типами. Каков наилучший способ смешать Option Strict VB.NET (который мы использовали на протяжении всей жизни проекта) и новые директивы Option Infer?

Ответы [ 2 ]

10 голосов
/ 11 октября 2008

Option Strict и Option Infer не конфликтуют, поэтому я не вижу вреда в том, что оба на.

В качестве руководства по стилю я предпочитаю указывать Option Strict, Explicit и Infer в верхней части каждого файла класса - это предотвращает возникновение проблем из-за различий в настройках проекта или IDE и дает понять, какие настройки используются.

0 голосов
/ 19 января 2019

Option Strict можно использовать без Option Infer, но Option Infer не следует использовать без Option Strict, поскольку это может привести к разнице в результирующем IL.

Рассмотрим эту строку кода:

txtBox.Text = If(str="", Nothing, CDate(str))

с опцией Strict Off и Option Infer Off, что эквивалентно:

txtBox.Text = CStr(If(str="", Nothing, CType(CDate(str), Object)))

Если str = "", то для txtBox.Text задано значение Nothing / пустая строка.

При включенном параметре Infer, но Option Strict Off, который становится:

txtBox.Text = Cstr(If(str="", CDate(Nothing), CType(CDate(str), Object)))

И CDate (ничего) = Date.MinValue и т. Д. TxtBox.Text = "01/01/0001"

Option Strict может заставить ваш код не компилироваться, Option Infer может изменить его значение. Это не значит, что Infer не может быть хорошей вещью, в общем-то, так и есть, но есть несколько предостережений, о которых вам нужно знать.

Исходный код может быть записан как:

 txtBox.Text = Cstr(If(str="", Nothing, CDate(str)))

В этом случае Option Strict не спасет вас, если вы включите Option. Infer On, но в кодовой базе без Strict более вероятна оригинальная версия.

...