C# LanguageTypes nullables


Syntaxe

  • Nullable<int> i = 10;
  • int? j = 11;
  • int? k = null;
  • DateTime? DateOfBirth = DateTime.Now;
  • décimal? Quantité = 1,0 m;
  • bool? IsAvailable = true;
  • carboniser? Lettre = 'a';
  • (type)? Nom de variable

Remarques

Les types nullables peuvent représenter toutes les valeurs d'un type sous-jacent, ainsi que null .

La syntaxe T? est un raccourci pour Nullable<T>

Les valeurs nullables sont en System.ValueType objets System.ValueType , elles peuvent donc être encapsulées ou non. En outre, la valeur null d'un objet nullable n'est pas la même que la valeur null d'un objet de référence, c'est simplement un indicateur.

Lors de la mise en boîte d'un objet nullable, la valeur null est convertie en référence null et la valeur non null est convertie en type sous-jacent non nullable.

DateTime? dt = null;
var o = (object)dt;
var result = (o == null); // is true

DateTime? dt = new DateTime(2015, 12, 11);
var o = (object)dt;
var dt2 = (DateTime)dt; // correct cause o contains DateTime value

La seconde règle conduit à un code correct mais paradoxal:

DateTime? dt = new DateTime(2015, 12, 11);
var o = (object)dt;
var type = o.GetType(); // is DateTime, not Nullable<DateTime>

En bref:

DateTime? dt = new DateTime(2015, 12, 11);
var type = dt.GetType(); // is DateTime, not Nullable<DateTime>

Types nullables Exemples Liés