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

Разница между компиляцией как С# 3.0 или ISO-1 или ISO-2?

В Visual Studio 2010 в разделе "Расширенные настройки сборки" доступны следующие опции "Версия языка":

  • По умолчанию
  • ISO-1
  • ISO-2
  • С# 3.0

Есть ли какое-либо преимущество для компиляции как С# 3.0, например. скорость тестирования или стабильность?

4b9b3361

Ответ 1

Единственный раз, когда вам нужно возиться с этим, - это если вы пишете код, скажем, VS 2010, но вы предполагаете, что код должен компилироваться на более ранних компиляторах (VS 2005 или VS 2003). Это ограничит возможности языка, такие как LINQ (только в С# 3), блоки итератора (только в ISO-2 и выше) и т.д.

Даже тогда он не является устойчивым; есть некоторые функции, которые довольно неудобно обнаруживать и не будут обнаружены - на них влияют некоторые формы типичного вывода, поэтому вы все равно должны тестировать более ранний компилятор.

Если у вас нет причин, используйте "default". Обычно "default" выбирается по умолчанию, er, по умолчанию. Если он выбирает ISO-1, то вы в какой-то момент изменили настройки VS.

Обычно с этим связана не разница скоростей - речь идет о langauge, который доступен; тем не менее, я не проверял некоторые тонкие случаи, например, реализация поля как события возвращается к старому, если выбран более ранний компилятор.

Ответ 2

Оставьте это по умолчанию. Это означает, что вы можете использовать все возможности языка С# 3.0.

Нажмите "F1", и в нем появляется:

http://msdn.microsoft.com/en-us/library/f4ckecs0(v=vs.110).aspx

  • default Компилятор принимает все допустимые синтаксисы языка.
  • ISO-1 Компилятор принимает только синтаксис, который включен в спецификацию языка ISO/IEC 23270: 2003 С#.
  • ISO-2 Компилятор принимает только синтаксис, который включен в спецификацию языка С# ISO/IEC 23270: 2006. Эта спецификация доступна на веб-сайте ISO.
  • С# 3 Компилятор принимает только синтаксис, который включен в спецификацию языка С# версии 3.0.

Ответ 3

Чтобы ответить на вопрос о преимуществах: при выборе одного над другим не должно быть преимуществ в производительности. То, что вы получаете или теряете, - это языковые функции. Например. С# 3 имеет "var", инициализаторы объектов, автоматические свойства, методы расширения, лямбда-выражения и т.д. И т.д.

Если вы хотите, чтобы ваш код строился в среде, отличной от С# 3, например, более старые .Net или Mono версии .Net CF, вам нужно будет их избежать. Конечно, можно писать код без этих функций в С# 3, поэтому ISO С# будет работать на С# 3 (и выше).

Я слышал, что люди утверждают, что такие вещи, как LINQ, могут быть неэффективными в некоторых случаях, поэтому вы можете утверждать, что хорошо написанный ISO С# может быть более эффективным. Я не уверен, что я действительно согласен с этим в качестве заявленного заявления, если у вас есть проблемы с перфомансом, тогда вам нужно профаймировать свой код и исправить горячие точки; избегая LINQ (например) не гарантирует более совершенный код.