Usando o operador condicional (? :) para seleção de método em C # (3.0)?
Estou refatorando algum código.
No momento, existem muitos lugares com funções como esta:
string error;
if (a) {
error = f1(a, long, parameter, list);
}
else {
error = f2(the_same, long, parameter, list);
}
antes de refatorar f1 e f2 (que são grandes, mas fazem coisas semelhantes), gostaria de refatorar para:
string error = (a ? f1 : f2)(a, long, parameter, list);
Como se faria em C. (As assinaturas de função são idênticas)
Mas eu recebo um erro:
"Erro 13 O tipo de expressão condicional não pode ser determinado porque não há conversão implícita entre 'grupo de métodos' e 'grupo de métodos'"
Isso me permitiria reconhecer que as listas de parâmetros são idênticas pela refatoração inicial, fornecendo comportamento invariável, e também refatorar as chamadas em um único local, garantindo que durante todas essas refatorações diversas, nada seja quebrado à medida que altero a interface de chamada para o método .
Estou sentindo falta de algo pequeno que permita que uma sintaxe próxima disso funcione (em oposição a várias definições de tipo de delegado extra, etc.)?
Desculpe editar, mas na verdade existe um valor de retorno e, sim, infelizmente, é uma string. ;-(
No momento, estou decidindo por isso:
string error = a ? f1(a, long, parameter, list) : f2(a, long, parameter, list);
O problema é que a lista de parâmetros é realmente muito longa e será refatorada, e eu prefiro tê-los consolidados primeiro e lidar com erros do compilador à medida que os altero.