Даны две реализации методов 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;
(все хорошо в задании выше, при приведении, даже если приведение было только для истинной части)