У меня есть следующие классы:
abstract class AClass { }
class Foo : AClass { }
class Bar : AClass { }
И когда я пытаюсь их использовать:
AClass myInstance;
myInstance = true ? new Foo() : new Bar();
Этот код не будет компилироваться из-за "Тип условного выражения не может быть определен, потому что нет никакого неявного преобразования между" CSharpTest.Class1.Foo "и" CSharpTest.Class1.Bar "
Но следующие примеры скомпилировать ok:
if (true)
{
myInstance = new Foo();
}
else
{
myInstance = new Bar();
}
Это тоже нормально:
myInstance = true ? (AClass) new Foo() : new Bar();
или
myInstance = true ? new Foo() : (AClass) new Bar();
Почему существует такая большая разница в поведении условного оператора, и если предложение?