Нет неявного преобразования при использовании условного оператора [duplicate]

На этот вопрос уже есть ответ:

Обнуляемые типы и троичный оператор: почему `? 10: null` запрещено? [Дубликат] 9 ответов

У меня есть следующие классы:

abstract class AClass { }
class Foo : AClass { }
class Bar : AClass { }

И когда я пытаюсь их использовать:

AClass myInstance;
myInstance = true ? new Foo() : new Bar();

Этот код не будет компилироваться из-за того, что «Тип условного выражения не может быть определен, поскольку не существует неявного преобразования между« CSharpTest.Class1.Foo »и« CSharpTest.Class1.Bar »»

Но следующие примеры компилируются нормально:

if (true)
{
    myInstance = new Foo();
}
else
{
    myInstance = new Bar();
}

Это тоже нормально:

myInstance = true ? (AClass) new Foo() : new Bar();

ил

myInstance = true ? new Foo() : (AClass) new Bar();

Почему такая большая разница в поведении условного оператора и оператора if?

Ответы на вопрос(2)

Ваш ответ на вопрос