Предположите два класса, оба потомка одного и того же суперкласса, например:
class MySuperClass{}
class A : MySuperClass{}
class B : MySuperClass{}
Тогда это назначение не будет передавать компилятор:
MySuperClass p = myCondition ? new A() : new B();
Компилятор жалуется, что A и B несовместимы (тип условного выражения не может быть определен, потому что нет никакого неявного преобразования между "A" и "B" [CS0173]). Но они оба типа MySuperClass, поэтому, на мой взгляд, это должно сработать. Не то чтобы это было большим делом; простое приведение - это все, что требуется для просвещения компилятора. Но, конечно же, это компромисс в компиляторе С#? Вы не согласны?