Использование условного оператора (? :) для выбора метода в C # (3.0)?

Я занимаюсь рефакторингом некоторого кода.

Прямо сейчас есть несколько мест с такими функциями:

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);

Проблема в том, что список параметров действительно очень длинный, и он будет подвергнут рефакторингу, и я бы предпочел сначала объединить их и решить с ошибками компилятора по мере их изменения.

23
задан Cade Roux 3 March 2011 в 21:07
поделиться