8
votes

? Opérateur (nullable) en C #

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.


0 commentaires

5 Réponses :


5
votes

Le ? Syntaxe est Syntaxe Sugar sur nullable struct.

Essence, lorsque vous écrivez int? MYNLULLABILLYINT , le compilateur le modifie à nullable myNLULLAIREINT . .

de MSDN (faites défiler jusqu'à "Aperçu des types nullables" ):

la syntaxe t? est sténographique pour nullable, où T est un type de valeur. Les deux formes sont interchangeables.


3 commentaires

+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 .



-3
votes

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.

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?


2 commentaires

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 est une structure.



1
votes

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;


0 commentaires

3
votes

Rien n'est changé sur le type de valeur elle-même, il est simplement enveloppé dans un système System.Nullable struct. http://msdn.microsoft.com/en-us/library/b3h38hb0. ASPX


0 commentaires

20
votes

Comme d'autres d'autres ont dit: "?" est juste sténographique pour le changer à nullable code>. Ceci est juste un autre type de valeur avec un drapeau booléen pour dire s'il existe ou non une valeur utile, ou s'il s'agit de la valeur null du type. En d'autres termes, nullable code> ressemble un peu à ceci: xxx pré>

évidemment dans le code réel, il existe plus de méthodes (comme 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>

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> xxx pré>

ce n'est pas un null référence em> - il est La valeur null de nullable code>, c'est-à-dire celui où hasvalue code> est false code>. p>

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>

int? x = 5;
int y = 5;

object o1 = x;
object o2 = y;


0 commentaires