Operador condicional y delegado de comparación
Dadas dos implementaciones de métodos de comparación:
// compares by Key...
private static int CompareByKey(KeyValuePair<int, string> x, KeyValuePair<int, string> y)
{
return x.Key.CompareTo(y.Key);
}
// compares by Value...
private static int CompareByValue(KeyValuePair<int, string> x, KeyValuePair<int, string> y)
{
return x.Value.CompareTo(y.Value);
}
¿Por qué no se compila el siguiente bloque de código de operador condiciona
Comparison<KeyValuePair<int, string>> sortMethod;
sortMethod = isSortByActualValue ? CompareByKey : CompareByValue;
Error del compilador: "El tipo de expresión condicional no se puede determinar porque no hay una conversión implícita entre 'grupo de métodos' y 'grupo de métodos'"
Sin embargo, el bloque de código equivalente que usa if-else no tiene ningún problema:
Comparison<KeyValuePair<int, string>> sortMethod;
if (isSortByActualValue)
sortMethod = CompareByKey;
else
sortMethod = CompareByValue;
(todo bien en las dos tareas anteriores)
Así que el operador condicional, si lanzo el delegado de comparación:
Comparison<KeyValuePair<int, string>> sortMethod;
sortMethod = isSortByActualValue ? (Comparison<KeyValuePair<int, string>>) CompareByKey : CompareByValue;
(todo bien en la tarea anterior, cuando se lanzó a pesar de que el lanzamiento fue solo en la parte verdadera)