Странное поведение компилятора - необязательный параметр - PullRequest
3 голосов
/ 10 февраля 2012

В моем проекте какой-то разработчик добавил метод, который имеет необязательный параметр в списке параметров:

public static string GeneratetPopupCall(string pageName,bool withEscapeChar = false)

Я знаю, что дополнительные параметры являются частью C # 4.0.Но наш проект нацелен на .net 3.5.(C # 3.0)

Мой вопрос:
Почему он компилируется, если 3.5 не поддерживает необязательные параметры?Почему это не ошибка компиляции или синтаксиса?

Ответы [ 3 ]

7 голосов
/ 10 февраля 2012

Вы используете компилятор 4.0 , ориентированный на платформу 3.5.

Компилируется в совместимый IL времени выполнения 2.0.

2 голосов
/ 10 февраля 2012

Пока вы используете Visual Studio 2010, вы можете использовать дополнительные параметры даже с более старыми .NET Frameworks, чем 4.0.

Более подробную информацию можно найти здесь

1 голос
/ 10 февраля 2012

В Visual Studio вы можете указать языковую версию для данного проекта (Свойства проекта -> Построить -> Дополнительно).Visual Studio использует компилятор v4.0 для работы с версией 3.5 платформы.

Хотя это работает, это может вызвать проблемы в других ситуациях.Например, автоматизированная среда сборки, которая вызывает другую версию компилятора, очевидно, потерпит неудачу.Просто что-то, чтобы остерегаться ...

...