Нет неявного преобразования при использовании условного оператора [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?