Sí lo hace. Como siempre, la especificación del lenguaje C# es la fuente definitiva .
A partir de la especificación C# 3, sección 7.12 (V3 en lugar de 4, como la especificación v4 entra en detalles dinámicos que no son realmente relevante aquí):
El tipo de la expresión a ?? b
depende de qué las conversiones implícitas están disponibles entre los tipos de operandos. En orden de preferencia, ¿el tipo de a? b es A0, A o B, donde A es el tipo de a, B es el tipo de b (siempre que b tenga un tipo), y A0 es el tipo subyacente de A si A es un tipo anulable, o A de otro modo . Específicamente, a ?? b
se procesa como sigue:
- Si A no es un tipo anulable o un tipo de referencia, un error de tiempo de compilación ocurre.
- Si A es un tipo anulable y existe una conversión implícita de b a A0, el tipo de resultado es A0. En en tiempo de ejecución, a se evalúa primero. Si un no es nulo, se desenvuelve a tipo A0, y este es el resultado. De lo contrario, b se evalúa y convertido a tipo A0, y esto se convierte en el resultado.
- De lo contrario, si existe una conversión implícita de b a A, el tipo de resultado es A. En tiempo de ejecución, a se evalúa primero. Si a no es nulo, a se convierte en el resultado . De lo contrario, b se evalúa y convertido a tipo A, y esto se convierte en como resultado.
- De lo contrario, si b tiene un tipo B y existe una conversión implícita de A0 a B, el tipo de resultado es B. En tiempo de ejecución, se evalúa primero a a. Si a no es nulo, a se desenvuelve al tipo A0 (a menos que A y A0 sean del mismo tipo) y se convierta en tipo B, y este se convierte en el resultado. De lo contrario, b es evaluado y se convierte en el resultado.
- De lo contrario, a y b son incompatibles y se produce un error en tiempo de compilación.
La segunda, tercera y cuarta viñetas son las relevantes.
Hay una discusión filosófica que se tenía acerca de si el compilador que se esté usando es el real fuente de verdad ... es la verdad acerca de un lenguaje lo que es significaba hacer o lo que es actualmente hace?
A la nota ... Creo que es por eso que todos disfrutamos que Eric Lippert esté cerca :) –
@Matthew: Una de las muchas razones, sí. Un aspecto interesante de Eric es que puede actuar como la encarnación humana de las especificaciones * y * del compilador ... –