Я думаю, Эрик снова скажет мне, что мои рассуждения немного неверны , но я все равно попробую и надеюсь на его исправление: -)
Группа методовнапример, B
, не имеет типа, это не объект (B.GetType()
не собирается компилироваться).
Его можно легко преобразовать в тип, поэтому существует неявное приведение,Пример:
Action<bool> a = B; // implicit cast taking place.
Однако, как видно из связанного вопроса, троичное выражение пытается найти тип возвращаемого значения, которому соответствуют обе части выражения.Он не знает, что позже должно произойти преобразование в Action<bool>
.Поскольку группы методов сами по себе не являются типами, между ними нет преобразования, и B
нельзя преобразовать в C
, и поэтому компилятор жалуется именно на это.
Путем приведения любой из частейтроичного выражения в Action<bool>
, вы говорите компилятору, что тип возвращаемого значения должен быть этим типом, и он проверяет, поддерживает ли другая часть троичного выражения неявное приведение к этому типу.Поскольку это так, код скомпилируется.