Необязательный параметр & перечисление params в сигнатуре метода в C# - PullRequest
0 голосов
/ 28 апреля 2020

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

Это моя подпись:

IList<FileInfo> GetFiles(string name = "*", params SignalState[] states);

Если Обратите внимание, что SignalState является enum.

. Я ожидаю, что смогу вызвать этот метод либо с одним аргументом (string ИЛИ SignalState), ни с одним, либо с обоими. Это работает, если я использую оба аргумента, если я не использую ни один из них, или если я использую только имя.

Прямо сейчас я ожидал бы, что будет работать только предоставление SignalState, потому что компилятор примет Первый параметр является необязательным, и мой SignalState соответствует второму параметру подписи.

Он не работает, и ошибка совершенно ясна, он ожидает имя.

Итак, я попытался изменив сигнатуру на это:

IList<FileInfo> GetFiles([Optional] string name, params SignalState[] states);

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

Я также пытался переключить два параметра: params SignalState первый и последний в строке, но компилятор специально говорит, что params должен быть последним, и показывает ошибку в подписи.

Может кто-нибудь объяснить для меня, почему он ведет себя так, как есть? Я ожидал, что смогу перейти ко второму параметру, так как первый является необязательным.

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

...