Я видел похожие вопросы к этому, но они связаны с разными типами, поэтому я думаю, что это новый вопрос.
Рассмотрим следующий код:
public void Test(bool value)
{
// The following line provokes a compiler error:
// "Type of conditional expression cannot be determined because there is
// no implicit conversion between 'method group' and 'method group".
Func<bool> test = value ? F : F;
}
public bool F()
{
return false;
}
Теперь, согласно стандарту С# 3.0,
Второй и третий операнды?: оператор управляет типом условное выражение. Пусть X и Y - типы второго и третьего операнды. Тогда,
Если X и Y одного типа, то это тип условного В противном случае, если неявное преобразование (§6.1) существует от X до Y, но не от Y до X, то Y - тип условное выражение. В противном случае, если подразумевается неявное преобразование (§6.1) от Y до X, но не от X до Y, тогда X - тип условного выражение. В противном случае выражение тип может быть определен, и ошибка времени компиляции.
Мне кажется, что в моем примере кода X и Y должны быть одного типа, так как они являются одним и тем же объектом Func. Почему он не компилируется?