К сожалению, старые версии компилятора C # не поддерживают это.
Компилятор C # 4.0 компилирует это:
public static void Foo(int? value = null)
Into:
public static void Foo([Optional, DefaultParameterValue(null)] int? value)
По сути, это то же самое, что и ваша первая попытка (с добавлением OptionalAttribute
, кроме того), в которой компилятор C # 2 допускает ошибки с CS1908, поскольку это не было поддержано непосредственно в этой версии компилятора.
Если вам нужна поддержка C # 2, в этом случае я бы рекомендовал вместо этого добавить перегруженный метод:
static void Test()
{
Test(null);
}
static void Test(int? x)
{
// ..