Estoy intentando crear una expresión ternaria y estoy consiguiendo el error siguienteExpresión ternario con interfaces como clase base
"Tipo de expresión condicional no se puede determinar porque no hay una conversión implícita entre LiveSubscription y DisconnectedSubscription"
la misma lógica funciona en una sentencia if, pero quería entender por qué no va a funcionar en una expresión ternaria -
Esta es la esencia de lo que estoy tratando de hacer:
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();
}
}
}
Siempre pude cambiarlo a un if/else pero primero quería entender qué está mal.
¿Qué quiere decir con "la expresión ternaria es de un cierto tipo"? ¿Qué implicaciones tiene eso para usar una expresión ternaria vs. una declaración if/else equivalente? Tenía la impresión de que una expresión ternaria era azúcar sintáctico simple, pero ¿es alguna vez más? – William
@William: Lea la respuesta completa, especialmente el párrafo después de la oración que citó. Soy de la opinión de que está bastante claro. –
Leí la respuesta completa pero no estoy seguro de las implicaciones que tiene sobre el uso de declaraciones ternaries vs. if. es decir, ¿POR QUÉ son expresiones ternarias de cierto tipo? ¿Son algún tipo de objeto? – William