Я занимаюсь рефакторингом некоторого кода.
Прямо сейчас есть несколько мест с такими функциями:
string error;
if (a) {
error = f1(a, long, parameter, list);
}
else {
error = f2(the_same, long, parameter, list);
}
до рефакторинга f1 и f2 (которые являются большие, но похожие вещи), я хотел бы провести рефакторинг до:
string error = (a ? f1 : f2)(a, long, parameter, list);
Как можно было бы сделать в C. (сигнатуры функций идентичны)
Но я получаю сообщение об ошибке:
«Ошибка 13 Тип условное выражение не может быть определено, потому что не существует неявного преобразования между 'группой методов' и 'группой методов' »
. Это позволило бы мне распознать идентичность списков параметров путем начального рефакторинга, дающего инвариантное поведение, а также рефакторинга вызовов в одном месте, гарантируя, что во время всех этих различных рефакторингов ничего не сломается, когда я изменю вызывающий интерфейс на метод.
Я упускаю что-то маленькое, что позволило бы синтаксису, близкому к этому, работать (в отличие от целого ряда дополнительных определений типов делегатов и т. д.)?
Извините за редактирование, но на самом деле существует возвращаемое значение, и да, к сожалению, это строка. ; - (
Прямо сейчас я согласен с этим:
string error = a ? f1(a, long, parameter, list) : f2(a, long, parameter, list);
Проблема в том, что список параметров действительно очень длинный, и он будет подвергнут рефакторингу, и я бы предпочел сначала объединить их и решить с ошибками компилятора по мере их изменения.