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