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)

Respuestas a la pregunta(4)

Su respuesta a la pregunta