Есть ли PHP-подобные необязательные параметры в C#?

С необязательными параметрами 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 ответа

Решение

Не в 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

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

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

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

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

Другие вопросы по тегам