Необязательные параметры, смешанные с Out в сигнатуре метода - PullRequest
1 голос
/ 26 апреля 2011

Я заменяю серию перегрузок методов горсткой методов с именованными и необязательными параметрами.

Хотя это не вызывает проблем, я обнаружил, что в работе есть гаечный ключ при использовании 'out'.

например,

если я должен был вызвать:

 foo(int a, out int b, int c = -1, string d = "")

Компилятор выдает ошибку, так как всякий раз, когда я вызываю этот метод, он не видит егоили признать его соответствующей сигнатурой для этого метода.

Я понимаю, что любые необязательные параметры ДОЛЖНЫ быть после обязательных -> есть ли такое правило для параметров с 'out', или я упускаю что-то очевидное

1 Ответ

3 голосов
/ 26 апреля 2011

Если вы имеете в виду, что вызывает метод, определенный в соответствии с примером, то просто (например):

int x;
foo(123, out x, d: "hi");

Параметр out не может быть необязательным (что означает, что он должен появляться перед необязательными), но может быть указан где угодно (в качестве именованного аргумента) - например:

int x;
foo(b: out x, a: 123);

Если вы хотите, чтобы b был необязательным, вам потребуется перегрузка:

void foo(int a, int c = -1, string d = "")
{
    int b;
    foo(a, out b, c, d);
}

Теперь вы можете позвонить:

foo(123, d: "hi");
...