Qu'est-ce qui est changé en appliquant un opérateur nullable sur le type de données de type de valeur qui peut maintenant stocker NULL. p>
5 Réponses :
Le Essence, lorsque vous écrivez de MSDN (faites défiler jusqu'à "Aperçu des types nullables" ): p>
la syntaxe t? est sténographique pour nullable, où T est un type de valeur. Les deux formes sont interchangeables. P>
blockQuote> ? code> Syntaxe est Syntaxe Sugar sur
nullable
struct. p>
int? MYNLULLABILLYINT CODE>, le compilateur le modifie à
nullable
+1 pour le sucre, mais je ne pense pas que le mot "opérateur" est correct ici.
@Kobi - assez juste. Réponse mise à jour.
Je dirais que ce n'est que le sucre syntaxique, voir cette Réponse .
En termes de base, un type nullable est une version en boîte du type normal qui possède un champ booléen supplémentaire appelé hasard sur celui-ci. Lorsque ce champ est défini sur FALSE, l'instance est NULL. P>
Consultez cette réponse pour un peu plus de détails sur la mise en œuvre du CLR et pourquoi ils auraient peut-être choisi: types nullables de boxe / décoffre - pourquoi cette implémentation? p>
Non, ce n'est pas une version en boîte. C'est toujours un type de valeur.
Je ne l'appellerais pas une version en boîte. La boxe crée une représentation de type de référence d'un type de valeur. Nullable
Le type change de ce qu'il était à un type nullable.
Si vous aviez un INT, et j'ai décidé de le faire un int?: P>
Nullable<int> myInt;
Rien n'est changé sur le type de valeur elle-même, il est simplement enveloppé dans un système System.Nullable
Comme d'autres d'autres ont dit: "?" est juste sténographique pour le changer à évidemment dans le code réel, il existe plus de méthodes (comme au risque de Sonnant comme un enregistrement brisé, cela reste un type de valeur. Il ne comprend pas la boxe ... et lorsque vous écrivez: p> ce n'est pas un null référence em> - il est La valeur null de quand un type nullable est em> boxé, le CLR a une fonctionnalité permettant de faire une référence sur une référence null, ou une touche uniforme T. Donc, si vous avez un code comme celui-ci: P> nullable
nullable
getvalueordfault () ) et des opérateurs de conversion, etc. Le compilateur C # ajoute les opérateurs levés em> qui sont efficacement proxy aux opérateurs d'origine pour
t code>. p>
nullable
hasvalue code> est
false code>. p>
int? x = 5;
int y = 5;
object o1 = x;
object o2 = y;