Тернарное выражение с интерфейсами в качестве базового класса

Я пытаюсь создать троичное выражение и получаю следующую ошибку

"Тип условного выражения не может быть определен, потому что нет неявного преобразования между LiveSubscription и DisconnectedSubscription"

Та же логика работает в операторе if, но я хотел понять, почему она не будет работать в троичном выражении -

Вот суть того, что я пытаюсь сделать:

public interface IClientSubscription
{
    bool TryDisconnect();
}

public class LiveSubscription : IClientSubscription
{
    public bool TryDisconnect()
    {
        return true;
    }
}

public class DisconnectedSubscription : IClientSubscription
{
    public bool TryDisconnect()
    {
        return true;
    }
}

public class ConnectionManager
{
    public readonly IClientSubscription Subscription;

    public ConnectionManager(bool IsLive)
    {
        // This throws the exception
        Subscription = (IsLive)
            ? new LiveSubscription()
            : new DisconnectedSubscription();

        // This works
        if (IsLive)
        {
            Subscription = new LiveSubscription();
        }
        else
        {
            Subscription = new DisconnectedSubscription();
        }
    }
}

Я мог бы всегда переключайте его на if/else, но я хотел сначала понять, что происходит не так!

8
задан William 21 March 2012 в 18:17
поделиться