Dados dos implementaciones de los métodos de comparación:operador condicional y comparación Delegado
// 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 el siguiente condicional operador bloque de código de compilación:
Comparison<KeyValuePair<int, string>> sortMethod;
sortMethod = isSortByActualValue ? CompareByKey : CompareByValue;
de error del compilador: "Tipo de expresión condicional no puede se 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 usa if-else d oes no tiene ningún problema:
Comparison<KeyValuePair<int, string>> sortMethod;
if (isSortByActualValue)
sortMethod = CompareByKey;
else
sortMethod = CompareByValue;
(todo bien en ambas asignaciones anteriores)
también lo hace el operador condicional, si yo echo el delegado Comparación:
Comparison<KeyValuePair<int, string>> sortMethod;
sortMethod = isSortByActualValue ? (Comparison<KeyValuePair<int, string>>) CompareByKey : CompareByValue;
(todo bien en el Asignación anterior, cuando se emitió aunque la conversión solo se realizó en la parte verdadera)
¿Cómo se definen CompareByAcutalValue y CompareByDisplayValue? Solo muestra la definición de CompareByKey y CompareByValue. –
El fragmento de código en mi publicación fue editado para mayor claridad. No me di cuenta de que cambié el nombre (de los métodos) solo parcialmente. Gracias Eric, he actualizado todas las referencias a CompareByActualValue para CompareByKey (y CompareByDisplayValue a CompareByValue). – Arun