Моя текущая проблема заключается в том, что я не могу использовать метод, который я написал так, как я ожидал.
Это моя подпись:
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
? Или я что-то упускаю из-за того, как работают необязательные параметры?