Oui, c'est le cas. Comme toujours, la spécification du langage C# est la source définitive .
De C# 3 spécifications, l'article 7.12 (v3 plutôt que 4, comme la spécification v4 va dans les détails dynamiques qui ne sont pas vraiment pertinentes ici):
Le type de l'expression a ?? b
dépend de les conversions implicites sont disponibles entre les types des opérandes. Par ordre de préférence, le type d'un? b est A0, A ou B, où A est le type de a, B est le type de b (à condition que b ait un type), et A0 est le type sous-jacent de A si A est un type Nullable, ou A sinon . Plus précisément, a ?? b
est traité comme suit:
- Si A est pas un type ou d'un type nullable de référence, une erreur de compilation se produit.
- Si A est un type Nullable et qu'une conversion implicite existe de b à A0, le type de résultat est A0. A run-time, a est d'abord évalué. Si un n'est pas nul, a est déballé pour taper A0, et ceci devient le résultat. Sinon, b est évalué et est converti en type A0, ce qui devient le résultat .
- Sinon, si une conversion implicite existe de b vers A, le type de résultat est A. Lors de l'exécution, a est d'abord évalué. Si a n'est pas nul, un devient le résultat . Sinon, b est évalué et est converti en type A, ce qui donne le résultat .
- Sinon, si b a un type B et une conversion implicite existe de A0 à B, le type de résultat est B. Au moment de l'exécution, a est d'abord évalué. Si a n'est pas null, a est déballé au type A0 (sauf si A et A0 sont du même type) et converti en type B, et ceci devient le résultat. Sinon, b est évalué et devient le résultat.
- Sinon, a et b sont incompatibles et une erreur de compilation se produit.
Les deuxième, troisième et quatrième puces sont les plus pertinentes.
Il y a une discussion philosophique à avoir de savoir si le compilateur vous arrive d'utiliser est la réelle source de vérité ... est la vérité d'une langue ce qu'il est signifiait faire ou que fait-il actuellement ?
Pour la note de pied ... Je pense que c'est pourquoi nous aimons tous Eric Lippert étant autour :) –
@Matthew: L'une des nombreuses raisons, oui. Un aspect intéressant d'Eric est qu'il peut agir comme l'incarnation humaine des spec * et * du compilateur ... –