Вы не можете сказать ему использовать компилятор C # 2, но вы можете сказать ему ограничиться языком C # 2.
В свойствах вашего проекта перейдите на вкладку Build, нажмите кнопку "Advanced ..." в правом нижнем углу, и там есть опция Language Version ... вы хотите ISO-2.
Обратите внимание, что это не идеально - оно останавливает использование большинства функций, не относящихся к C # -2, но некоторые изменения все же могут пройти. Например, я полагаю, что он все еще будет использовать более мощный вывод обобщенного типа, доступный в C # 3, чем версия C # 2. Стоит быть осторожным с этим. Вот пример:
using System;
class Test
{
static void Main()
{
Foo("hello", new object());
}
static void Foo<T>(T first, T second)
{
}
}
Компилятор C # 2 не может решить, что использовать для T
в вызове Foo
, потому что каждый аргумент используется полностью отдельно для определения логического вывода типа, а любые противоречивые результаты дают ошибку во время компиляции. C # 3 использует каждый аргумент для добавления границ того, чем T
может быть, и выдает ошибку только в случае конфликта границ (или если параметр типа не может быть определен). Компилятор C # 3 при вызове в режиме C # 2 по-прежнему использует поведение C # 3.
Есть ли причина, по которой вы не можете переключить свою фактическую сборку на использование компилятора .NET 3.5 (C # 3)? Нет необходимости приковывать себя к C # 2 только потому, что вы используете .NET 2. Черт, с LINQBridge вы даже можете использовать LINQ to Objects:)