есть PHP-подобные необязательные параметры в C #?
-
19-08-2019 - |
Вопрос
с необязательными параметрами 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?
Решение
Не в 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)
Я должен отметить, что это теряет безопасность типов, и нет никакого принуждения к типу параметров или порядка.