Avez-vous déjà essayé d'utiliser la méthode Convert.ChangeType()
pour convertir une valeur en type Nullable<T>
? Bizarrement, il lancera un InvalidCastException
indiquant "Un objet nul ne peut pas être converti en un type de valeur".Pourquoi les valeurs Nullables <T> sont-elles considérées comme un type de valeur?
Essayez de lancer sur votre fenêtre immédiate: ?System.Convert.ChangeType(null, typeof(int?))
Pour une raison obscure, Nullables sont les types de valeur considérée. Par exemple, typeof(int?).IsValueType
renvoie true
.
Pour moi, depuis Nullable<T>
accepter null
, c'est un type de classe, pas un type de valeur. Est-ce que quelqu'un sait pourquoi il serait mis en œuvre différemment?
L'étrange comportement de boxe prend du temps à comprendre - mais je suis content que ce soit comme ça; sinon, une grande partie de la valeur de 'Nullable' (qui provient de la transparence des valeurs) serait perdue. –
LBushkin
En fait, le comportement de boxe était un changement qui s'est produit tard dans le cycle de développement de .NET 2.0. Au début des bêtas, 'Nullable' était une structure simple. En pratique, lorsque vous utilisez réellement des types nullables pour stocker des valeurs inexistantes, je pense aussi que ce comportement est plus naturel. –
Excellente information ajoutée par le chemin – Nick