C# LanguageNullable types

Sintassi

  • Nullable<int> i = 10;
  • int? j = 11;
  • int? k = null;
  • Appuntamento? DateOfBirth = DateTime.Now;
  • decimale? Quantità = 1,0 m;
  • bool? IsAvailable = true;
  • char? Lettera = 'a';
  • (genere)? variableName

Osservazioni

I tipi Nullable possono rappresentare tutti i valori di un tipo sottostante e null .

La sintassi T? è una scorciatoia per Nullable<T>

I valori Nullable sono in realtà oggetti System.ValueType , quindi possono essere inseriti in box e unbox. Inoltre, il valore null di un oggetto nullable non è uguale al valore null di un oggetto di riferimento, è solo una bandiera.

Quando un oggetto nullable boxing, il valore null viene convertito in riferimento null e il valore non null viene convertito in un tipo sottostante 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 seconda regola porta al codice corretto, ma paradossale:

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

In forma breve:

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

Nullable types Esempi correlati