Conversion boxing des types nullables (Guide de programmation C#)
Mise à jour : novembre 2007
Les objets basés sur des types nullables sont boxed uniquement si l'objet n'est pas null. Si HasValue a la valeur false, la référence d'objet est assignée à null au lieu de boxing. Par exemple :
bool? b = null;
object o = b;
// Now o is null.
Si l'objet n'est pas null (si HasValue a la valeur true), la conversion boxing s'applique au type sous-jacent sur lequel repose l'objet nullable. La conversion boxing d'un type valeur nullable non null convertit le type valeur lui-même, pas le System.Nullable<T> qui encapsule le type valeur. Par exemple :
bool? b = false;
int? i = 44;
object bBoxed = b; // bBoxed contains a boxed bool.
object iBoxed = i; // iBoxed contains a boxed int.
Les deux objets boxed sont identiques à ceux créés par la conversion boxing des types non nullables. Comme les types boxed non nullables, ils peuvent être unboxed en types nullables, comme dans l'exemple suivant :
bool? b2 = (bool?)bBoxed;
int? i2 = (int?)iBoxed;
Notes
Le comportement de types nullables lorsqu'ils sont boxed a deux avantages :
Les objets nullables et leur équivalent boxed peuvent être testés pour chercher des valeurs null :
bool? b = null; object boxedB = b; if (b == null) { // True. } if (boxedB == null) { // Also true. }
Les types nullables boxed prennent en charge pleinement les fonctionnalités du type sous-jacent :
double? d = 44.4; object iBoxed = d; // Access IConvertible interface implemented by double. IConvertible ic = (IConvertible)iBoxed; int i = ic.ToInt32(null); string str = ic.ToString();
Pour obtenir d'autres exemples sur les types nullables et le comportement de conversion boxing, consultez Type nullable, exemple.
Voir aussi
Tâches
Comment : identifier un type nullable (Guide de programmation C#)