CS0173 ошибка компиляции на троичной системе с разными типами возврата - PullRequest
1 голос
/ 06 мая 2020

Рассмотрим этот пример:

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 (они простираются от него), и в дальнейших примерах достаточно явно привести только один из них, чтобы троичный рабочий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...