Условный оператор и делегат сравнения

Даны две реализации методов сравнения:

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

Почему бы не скомпилировать следующий блок кода условного оператора:

Comparison<KeyValuePair<int, string>> sortMethod;
sortMethod = isSortByActualValue ? CompareByKey : CompareByValue;

Ошибка компилятора: «Невозможно определить тип условного выражения, поскольку не существует неявного преобразования между« группой методов »и« группой методов »»

Однако эквивалентный блок кода, использующий if-else, не имеет проблем:

Comparison<KeyValuePair<int, string>> sortMethod;
if (isSortByActualValue)
    sortMethod = CompareByKey;
else
    sortMethod = CompareByValue;

(все хорошо в обоих заданиях выше)

Как и условный оператор, если я приведу делегат сравнения:

Comparison<KeyValuePair<int, string>> sortMethod;
sortMethod = isSortByActualValue ? (Comparison<KeyValuePair<int, string>>) CompareByKey : CompareByValue;

(все хорошо в приведенном выше задании, когда приведение происходит, хотя приведение было только в истинной части)

Ответы на вопрос(2)

Ваш ответ на вопрос