Sí - el compilador no puede encontrar un tipo adecuado para la expresión condicional. Ignore el hecho de que lo está asignando a un int?
- el compilador no usa esa información. Entonces la expresión es:
(this.Policy == null) ? null : 1;
¿Cuál es el tipo de esta expresión? La especificación del lenguaje indica que debe ser el tipo del segundo operando o el del tercer operando. null
no tiene ningún tipo, por lo que debería ser int
(el tipo del tercer operando), pero no hay conversión de null
a int
, por lo que falla.
moldeada cualquiera de los operandos a int?
y funcionará, o utilizar otra forma de expessing el valor nulo - por lo que cualquiera de estos:
(this.Policy == null) ? (int?) null : 1;
(this.Policy == null) ? null : (int?) 1;
(this.Policy == null) ? default(int?) : 1;
(this.Policy == null) ? new int?() : 1;
Estoy de acuerdo que es un ligero dolor que usted tiene que hacer esto .
Desde la sección de especificación del lenguaje C# 3.0 7.13:
El segundo y tercer operandos de la operador?: Controlar el tipo de la expresión condicional. Sean X e Y los tipos del segundo y tercer operandos .Entonces,
Si X e Y son del mismo tipo, entonces este es el tipo de la condicional expresión.
lo contrario, si existe una conversión implícita (apartado 6.1) de X a Y, pero no de Y a X, entonces Y es el tipo de la expresión condicional.
lo contrario, si una conversión implícita (apartado 6.1) existe de Y a X, pero no de X a Y, entonces X es el tipo de la expresión condicional.
De lo contrario, no se puede determinar ningún tipo de expresión y se produce un error en tiempo de compilación .
asquerosamente completo ... –
increíblemente preciso y preciso. –
@David: No era exhaustivo antes de tener la cita de la especificación del idioma. Me siento mejor al respecto ahora :) –