Для меня разработка для экосистемы Java оплачивала счета на протяжении многих лет. Однако уже несколько лет я работаю в основном в пространстве .Net. Первоначально мой переход в мир .Net заключался в написании и поддержке кода VB.Net. VS предоставил почти всю хорошую поддержку IntelliSense, которую я ожидал после многих лет работы с комбинацией Eclipse/Java. В конце концов мой работодатель решил заняться новой разработкой на C#. Мое первоначальное впечатление от поддержки IntelliSense для C# было далеко не блестящим. Иногда кажется, что у VS нет фонового компилятора для C#, но иногда он делает что-то умное, указывая на то, что там есть некоторая фоновая обработка, но этого недостаточно, чтобы действительно значительно повысить производительность. Есть ли разумная техническая причина такого несоответствия в отношении поддержки IntelliSense между двумя языками?
Почему отсутствует поддержка IntelliSense для C# по сравнению с VB.NET?
Ответы (1)
Между C# и VB уже давно существует разрыв. VB генерирует для вас много кода. Например, нажатие клавиши Enter после завершения оператора «Если» автоматически добавит «Тогда» в конце этой строки, если вы его пропустили, и закроет его частью «Конец, если». В C# вы можете добавить эти начальные и закрывающие фигурные скобки {}.
VB имел фоновую компиляцию задолго до C#. На самом деле, это был один из главных привлекательных факторов использования ReSharper, который предоставлял такую функциональность. Однако с VS 2008/.NET 3.5 SP1 все изменилось. Вы можете прочитать сообщение Скотта Гу об этом здесь, но я вставлю соответствующую часть:
«Редактор кода C# теперь идентифицирует и отображает красные волнистые линии для многих проблем семантического кода, для выявления которых ранее требовалась явная компиляция. Например, если вы попытаетесь объявить и использовать неизвестный тип в редакторе кода C# сегодня, вы не видеть ошибку компиляции до тех пор, пока вы не выполните сборку. Теперь с пакетом обновления 1 (SP1) вы сразу увидите живые красные волнистые линии (никакой явной компиляции не требуется)».
Использование CodeRush или ReSharper определенно улучшает работу с автозавершением общих операторов, которые заставят разработчика VB почувствовать плавный переход.
Это не совсем решает технические проблемы, но команды разработчиков разные и не обязательно делают одно и то же. Другими словами, вряд ли будет общий подход. Эта запись в блоге выдержка, техническим руководителем группы VB, поддерживает это:
«Фоновая компиляция» — это функция VB, которая выдает вам полный набор ошибок при вводе текста. Люди, которые переключаются между VB и C#, замечают это, но разработчики, использующие только VB, могут не понимать, что другие языки, такие как C#, не всегда дают вам 100% точную Intellisense и не всегда дают вам все существующие ошибки. в вашем коде. Это связано с тем, что их механизмы Intellisense представляют собой отдельные компиляторы с уменьшенным масштабом, которые не выполняют полную компиляцию в фоновом режиме. VB, с другой стороны, компилирует весь ваш проект от начала до конца, пока Visual Studio простаивает, что позволяет нам немедленно заполнить список задач абсолютно точными ошибками и предоставить вам полностью точную Intellisense.
Последнее замечание: недавнее интервью Channel9 с руководителем отдела C#/VB/F# Лукой Болоньезе, в котором он подчеркнул, что языки больше не будут расходиться в разные стороны и начнет делиться своими сходствами. Так что, похоже, в будущем нас ждут великие дела!