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

С# 3.5 Необязательный и DefaultValue для параметров

Я использую С#.net 3.5 для создания приложения. Я работаю с необязательными атрибутами параметра в .net 4.0 без проблем. Я заметил, что с помощью 3.5 есть опция (обходной путь), чтобы добавить следующие атрибуты к вашему методу следующим образом:

    public static void MethodName(string name, [Optional][DefaultValue(null)]string placeHolder)
    {

    }

Несмотря на то, что я добавил атрибуты метода, если я попытаюсь вызвать его так:

     MethodName("test");

Компилятор будет жаловаться, что он ищет два параметра вместо одного. Возможно ли это сделать с помощью С#.net 3.5? Я что-то делаю неправильно?

4b9b3361

Ответ 1

Необязательными параметрами являются языковые функции С# 4.0, поэтому неважно, в какой среде вы настроите таргетинг, но вы должны скомпилировать его с помощью VS 2010 или новее.

Используйте этот синтаксис в VS 2010 или новее:

public static void MethodName(string name, string placeHolder = null)
{
    // body
}

Или это в старой версии:

public static void MethodName(string name, string placeHolder)
{
    // body
}

public static void MethodName(string name)
{
    MethodName(name, null);
}

Ответ 2

Атрибут Optional доступен с С# 1.0 и используется при взаимодействии с внешним кодом, он не влияет на вызовы методов в вашем собственном коде.

Поскольку в С# 3 нет дополнительных параметров, вы можете использовать перегрузку:

public static void MethodName(string name, string placeHolder) {
  ...
}

public static void MethodName(string name) {
  MethodName(name, null);
}

(Боковое примечание: нет версии С# 3.5, которая является версией фреймворка.)

Ответ 3

Взгляните на следующий поток StackOverflow: С# Дополнительные параметры в .net 3.5

Нельзя использовать копию, вставляя все, что было сказано там, так как поток охватывает почти все. Удачи.