есть PHP-подобные необязательные параметры в C #? - PullRequest
2 голосов
/ 16 марта 2009

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

public function getCustomer(id, optionalMessage = "(no message)") {
    ...
}

в C # Я обычно решаю эту проблему с перегрузкой метода C # , например ::

public void GetCustomer(int id) 
{
    ...
}

public void GetCustomer(int id, string optionalMessage)
{
    ...
}

но я пропускаю прагматичный вариант PHP, имеет ли C # также какой-то сахарный синтаксис для выполнения необязательных параметров , как в примере PHP?

Ответы [ 2 ]

8 голосов
/ 16 марта 2009

Не в C # 3.0; эта функция есть на листе для C # 4.0 - см. здесь .

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

public void Foo(int a) {Foo(a, "");}
public void Foo(int a, string b) {...}

Предлагаемый синтаксис будет:

public void Foo(int a, string b = "") {...}

вызывается с любым из:

Foo(123); // use default b
Foo(123, "abc"); // optional by position
Foo(123, b: "abc"); // optional  by name
4 голосов
/ 16 марта 2009

Нет, но вы можете имитировать их до некоторой степени, особенно если ваши необязательные параметры относятся к одному и тому же типу (или вы не возражаете против некоторого приведения).

Вы можете использовать флаг params.

void paramsExample(object arg1, object arg2, params object[] argsRest) 

Я должен отметить, что это теряет безопасность типов, и нет никакого принуждения к типу параметров или порядка.

...