Подтвердить что ты не робот

Лучшие практики: опция Infer

Что вы считаете лучшими практиками использования Option Infer в своих проектах?

В Visual Studio 2008 опция Infer - это директива, позволяющая компилятору вывести тип данных объявленной переменной, посмотрев, что ей назначено.

Это ключевая функция в VS2008 и широко используется с операторами LINQ и запросами. Однако включение опции Infer может создать ловушки для будущих программистов по обслуживанию.

4b9b3361

Ответ 1

Тип вывода, используемого С# (и, следовательно, я предполагаю другие языки .net), очень точен (и отлично). Компилятор будет разрешать только оператор, если тип ясен и недвусмыслен. Следовательно, результат не является потерей точности... это просто то, что вы сохраняете разработчика от объявления типа более одного раза. Вы сокращаете дублирование кода.

(EDIT: Кроме того, важно понять, что результат все еще строго типизирован. Компилятор знает, в время компиляции, какой именно тип переменной. Существует Nothing, например, вариант. Если вы наберете var x = 42;, он просто выяснит, что x является int, потому что вы помещаете int с правой стороны, тем самым сохраняя некоторые типизации и дублирования).

Единственная причина, по которой будущие программисты по обслуживанию могут не понимать, что они просто не понимают языковой особенности вывода типа в первую очередь. Но я думаю, что более разумно ожидать и требовать, чтобы программисты-программисты знали особенности языка, а не избегали хороших языковых функций из-за страха, что будущие программисты не узнают их.

Я думаю, если вы находитесь в ситуации, когда вы знаете, что будущие программисты младшие и не очень хорошо осведомлены о языке, тогда, возможно, вы избежите некоторых вещей. Но это заставляет меня задаться вопросом, следует ли рассматривать другой язык или даже "платформу", такую ​​как Access, которая представляет собой гибрид "реального программирования" и что-то, что не программист может сделать с помощью.

Ответ 2

Вот моя рекомендация:

Если вы уже установили Option Explicit On и Option Strict On (на любом уровне)

  • Выключить опцию Infer in IDE и свойства проекта
  • Включить опцию Infer в файлах кода, когда вам это нужно. Это гарантирует, что код легко читается, и когда он включен, он предупреждает читателя о том, как его искать, и напоминает им навести курсор на var, чтобы увидеть его тип.

Когда Option Explicit выключен...

Turning Option Infer On позволяет старым VB6-кодом, полным вариантов, компилироваться и работать лучше, поскольку компилятор назначает тип vars во время компиляции, вместо того, чтобы позволить var быть ограниченным. Тем не менее, тестирование должно быть выполнено, чтобы гарантировать, что vars не хранят несколько типов в течение их жизненного цикла.

ПРИМЕЧАНИЕ. Это не является заменой правильного рефакторинга кода VB6, перенесенного в dot NET. Варианты плохие, дети, мм'кай?

Ответ 3

Большинство ошибок, которые я вижу, связаны с Strict и Explicit, но некоторые из них встречаются с Infer. Для VB я думаю, что это Option Strict On: Option Explicit On: Option Infer Off это лучшее место для начала. Это делает запись For Next немного более громоздкой, но это означает, что не будет вопроса о ваших намерениях.

Ответ 4

Вывод типа VB.Net не может использоваться на страницах aspx в среде частичного доверия ...... Как часто, варианты по умолчанию VB.Net делают нашу жизнь сложнее. В VB9 полезный параметр Infer по умолчанию отключен. Мы не можем написать опцию Infer On... Мы не можем написать <% @Page... infer = "true" % > в верхней части страницы... Мы не можем писать в web.config... Кто-то просто забыл о VB.Net.

......                                                   

Смотрите здесь: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=321981

Ответ 5

Я считаю, что это безопасный вариант, потому что вы не можете передавать тип "Var" через границы методов. Я не большой поклонник типов VB или Javascript Variant, но Var в С# весьма удобен. Я бы не выключил этот параметр, если вы планируете использовать Linq.

- Matt