Рассмотрим этот пример:
using System.IO;
using System;
class A{}
class B : A{}
class C : A{}
class Program
{
static void Main()
{
GetSomething1(true);
}
static A GetSomething1(bool oneOrAnother)
{
return oneOrAnother ? new B() : new C(); // throws a compile error
}
static A GetSomething2(bool oneOrAnother)
{
return oneOrAnother ? (A)(new B()) : new C(); // no error
}
static A GetSomething3(bool oneOrAnother)
{
return oneOrAnother ? new B() : (A)(new C()); // no error
}
static A GetSomething4(bool oneOrAnother)
{
return oneOrAnother ? (A)(new B()) : (A)(new C()); // no error
}
}
Тернар в GetSomething1 генерирует
ошибку CS0173: Тип условного выражения не может быть определен, потому что нет неявного преобразования между `B ' и `C '
Я не могу понять, почему, поскольку и B, и C могут быть преобразованы в A (они простираются от него), и в дальнейших примерах достаточно явно привести только один из них, чтобы троичный рабочий