2012-01-04 14 views

Respuesta

15

Debido 0 es un int, que se convierte implícitamente a un objeto (en caja), y no se puede desempacar una caja int directamente a un cortocircuito. Esto funcionará:

short s = (short)(int)(nullObj ?? 0); 

Una caja T (donde T es un tipo de valor no anulable, por supuesto) puede ser sacó de la caja sólo para T o T?.

+2

[Representación e identidad] (http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx) explica por qué esto es necesario (es decir, por qué esto no es hecho automáticamente con solo 1 lanzamiento). – Brian

5

El resultado del operador nulo-coalescente en la última línea es un int en caja. A continuación, intenta desvincularlo al short, que falla en el momento de la ejecución en la forma en que lo ha mostrado.

Es como usted ha hecho esto:

object x = 0; 
short s = (short) x; 

La presencia del operador nulo coalescencia es un poco de una pista falsa aquí.

+2

+1 para señalar el arenque rojo. – phoog

Cuestiones relacionadas