Looking for c# Answers? Try Ask4KnowledgeBase
Looking for c# Keywords? Try Ask4Keywords

C# LanguageНеверные типы


Синтаксис

  • Nullable<int> i = 10;
  • Int? j = 11;
  • Int? k = null;
  • DateTime? DateOfBirth = DateTime.Now;
  • десятичный? Сумма = 1,0 м;
  • BOOL? IsAvailable = true;
  • обугливается? Letter = 'a';
  • (тип)? имяПеременной

замечания

Nullable типы могут представлять все значения базового типа, а также null .

Синтаксис T? является сокращением для Nullable<T>

Нулевыми значениями являются объекты System.ValueType , поэтому они могут быть в коробке и распакованы. Кроме того, null значение объекта с null значением не совпадает с null значением ссылочного объекта, это всего лишь флаг.

При боксировании с нулевым объектом нулевое значение преобразуется в null ссылку, а значение, отличное от null , преобразуется в базовый тип с нулевым значением.

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

Второе правило приводит к правильному, но парадоксальному коду:

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

В краткой форме:

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

Неверные типы Связанные примеры