Я рефакторинг кода.
В настоящее время существует довольно много мест с такими функциями:
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);
Проблема в том, что список параметров действительно очень длинный и собирается получить рефакторинг, и я предпочел бы, чтобы они сначала консолидировались и обрабатывали ошибки компилятора, когда я их изменяю.