Je sais qu'il est possible d'avoir des types de valeur Nullable qui enveloppent le type de valeur et permettent de stocker null. Mais y a-t-il une raison technique pour laquelle le type de valeur n'est pas nul ou la raison n'est-elle que conceptuelle?Pourquoi les types de valeur ne peuvent pas être NULL
Répondre
Un type de référence est stocké en tant que référence (comme un pointeur) dans une instance d'objet.
null
signifie une référence qui ne pointe pas sur une instance d'un objet.
Les types de valeurs sont stockés comme valeurs elles-mêmes, sans aucune référence.
Par conséquent, il n'a pas de sens d'avoir un null
valeur type — le type de valeur par définition contient une valeur.
Nullable<T>
est un type de valeur avec un indicateur HasValue
qui peut être false
pour indiquer qu'il n'y a pas de valeur. Il a toujours une valeur (lorsque HasValue
est false
, Value
est default(T)
), mais le drapeau HasValue
vous dit d'ignorer la valeur.
Cela n'a rien à voir avec null
, sauf que le CLR unboxes automatiquement null
valeurs à un boxed Nullable<T>
avec HasValue
ensemble à false
.
Un type de valeur comme 'Int32' est stocké en utilisant trente-deux bits de stockage. Il y a précisément 4 294 967 296 valeurs qui peuvent être représentées par 32 bits, et un Int32 peut contenir 4 294 967 296 valeurs différentes. Si -2,147,483,648 n'était pas une valeur Int32 valide, il pourrait être possible de l'utiliser pour représenter "null", mais le fait que sa représentation binaire ne soit pas entièrement composée de zéros compliquerait les choses. En revanche, le nombre de combinaisons de bits possibles dans un type de référence dépasse de loin le nombre de références valides possibles, il n'y a donc aucune difficulté à réserver une combinaison de bits pour représenter "null".
Toute référence (article) à ce que vous expliquez? Je ne suis toujours pas clair sur l'idée que vous avez placée. – Marshal
- 1. Pourquoi les arguments optionnels typés ne peuvent-ils pas avoir la valeur par défaut Null?
- 2. Pourquoi les structs ne peuvent pas être affectés directement?
- 3. Pourquoi les aspects de Maven ne peuvent pas être appliqués?
- 4. Quelle est la raison pour laquelle tous les types de valeur ne peuvent pas être validés?
- 5. Pourquoi les variables membres ne peuvent-elles pas être partagées?
- 6. Pourquoi les éléments suivants ne peuvent pas être compilés?
- 7. Angular.JS: pourquoi les entrées ne peuvent-elles pas être éditées?
- 8. Pourquoi les coins (rayon) ne peuvent pas être différents?
- 9. Les types d'exception peuvent-ils être génériques?
- 10. Pourquoi certains objets Silverlight ne peuvent-ils pas être des types Nullable <>?
- 11. Les propriétés de ma vue ne peuvent pas être sauvegardées
- 12. Les modèles ne peuvent pas être 'virtuels'
- 13. Les importations ne peuvent pas être résolus
- 14. pourquoi certains courriels ne peuvent être atteints?
- 15. Pourquoi les modèles ne peuvent-ils pas prendre les types locaux de fonction?
- 16. Les enfants de 'System.Windows.Controls.UIElementCollection' ne peuvent pas être NULL. Objet dérivé de UIElement attendu
- 17. Les éléments de la liste ne peuvent pas être multipliés
- 18. les valeurs sélectionnées de dropdownlist ** ne peuvent pas être dupliquées **
- 19. Pourquoi cursorMark et timeAllowed ne peuvent pas être utilisés ensemble?
- 20. Pourquoi Ellipsis et NotImplemented ne peuvent-ils pas être décapés?
- 21. XCode 4.6 analyseur clang inquiet sur null C++ pointeurs que ne peuvent pas être null
- 22. schéma non valide et les types ne peuvent pas être chargés parce que l'ensemble contient EdmSchemaAttribute
- 23. Les structs ne peuvent-ils vraiment pas être NULL en C#?
- 24. L'opérateur Spark null ne fonctionne pas avec les types Nullable
- 25. Application_Error System.Web.HttpResponse.Redirect valeur ne peut pas être null
- 26. types d'entité ne peut pas être générique
- 27. Pourquoi les relations de classe dans les packages gérés Salesforce ne peuvent-elles pas être modifiées?
- 28. C# Les types anonymes ne peuvent pas être attribués - il est en lecture seule
- 29. Quels types d'exécutables peuvent être décompilés?
- 30. Pourquoi les types NULL se comportent-ils de cette façon?
nous pouvons rendre les variables NULL en utilisant? opérateur. par exemple, int? x = null; – Shekhar
@Shekhar: Il s'en rend compte. Cela n'a rien à voir avec 'null'. – SLaks
merci pour l'explication. – Shekhar