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

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

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

Ошибка компилятора: "Type of conditional expression cannot be determined because there is no implicit conversion between 'method group' and 'method group'"

Однако эквивалентный блок кода, использующий 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;

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

5
задан Arun 13 March 2012 в 17:17
поделиться