Есть ли 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)
Я должен отметить, что это теряет безопасность типов, и нет никакого принуждения типов к параметрам или порядку.