Nenhuma conversão implícita ao usar o operador condicional [duplicado]

Esta pergunta já tem uma resposta aqui:

Tipos anuláveis e operador ternário: por que é `? 10: null` proibido? [duplicado 9 respostas

Tenho as seguintes classes:

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

E quando estou tentando usá-los:

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

Este código não será compilado por causa do "Tipo de expressão condicional não pode ser determinado porque não há conversão implícita entre 'CSharpTest.Class1.Foo' e 'CSharpTest.Class1.Bar'"

Mas as seguintes amostras estão compilando ok:

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

Está tudo bem também:

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

o

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

or que existe uma diferença tão grande no comportamento do operador condicional e na cláusula i

questionAnswers(2)

yourAnswerToTheQuestion