Книга: C# 4.0: полное руководство
Основы применения обнуляемых типов
Основы применения обнуляемых типов
Обнуляемый тип — это особый вариант типа значения, представленный структурой. Помимо значений, определяемых базовым типом, обнуляемый тип позволяет хранить пустые значения (null
). Следовательно, обнуляемый тип имеет такой же диапазон представления чисел и характеристики, как и его базовый тип. Он предоставляет дополнительную возможность обозначить значение, указывающее на то, что переменная данного типа не инициализирована. Обнуляемые типы являются объектами типа System.Nullable<T>
, где Т — тип значения, которое не должно быть обнуляемым.
-------------------------------------
ПРИМЕЧАНИЕ
Обнуляемые эквиваленты могут быть только у типов значений.
-------------------------------------
Обнуляемый тип может быть указан двумя способами. Во-первых, объекты типа Nullable<T>
, определенного в пространстве имен System
, могут быть объявлены явным образом. Так, в приведенном ниже примере создаются обнуляемые переменные типа int
и bool
.
System.Nullable<int> count;
System.Nullable<bool> done;
И во-вторых, обнуляемый тип объявляется более кратким и поэтому чаще используемым способом с указанием знака ?
после имени базового типа. В приведенном ниже примере демонстрируется более распространенный способ объявления обнуляемых переменных типа int
и bool
.
int? count;
bool? done;
Когда в коде применяются обнуляемые типы, создаваемый обнуляемый объект обычно выглядит следующим образом.
int? count = null;
В данной строке кода переменная count
явно инициализируется пустым значением (null
). Это вполне соответствует принятому правилу: прежде чем использовать переменную, ей нужно присвоить значение. В данном случае присваиваемое значение означает, что переменная не определена.
Значение может быть присвоено обнуляемой переменной обычным образом, поскольку преобразование базового типа в обнуляемый определено заранее. Например, в следующей строке кода переменной count
присваивается значение 100.
count = 100;
Определить, имеет переменная обнуляемого типа пустое или конкретное значение, можно двумя способами. Во-первых, можно проверить переменную на пустое значение. Так, если переменная count
объявлена так, как показано выше, то в следующей строке определяется, имеет ли эта переменная конкретное значение.
if (count != null) // переменная имеет значение
Если переменная count
не является пустой, то она содержит конкретное значение. И во-вторых, можно воспользоваться доступным только для чтения свойством HasValue
типа Nullable<T>
, чтобы определить, содержит ли переменная обнуляемого типа конкретное значение. Это свойство показано ниже.
bool HasValue
Свойство HasValue
возвращает логическое значение true
, если экземпляр объекта, для которого оно вызывается, содержит конкретное значение, а иначе оно возвращает логическое значение false
. Ниже приведен пример, в котором конкретное значение обнуляемого объекта count определяется вторым способом с помощью свойства HasValue
.
if(count.HasValue) // переменная имеет значение
Если обнуляемый объект содержит конкретное значение, то получить это значение можно с помощью доступного только для чтения свойства Value
типа Nullable<T>
.
Т Value
Свойство Value
возвращает экземпляр обнуляемого объекта, для которого оно вызывается. Если же попытаться получить с помощью этого свойства значение пустой переменной, то в итоге будет сгенерировано исключение System.InvalidOperationException
. Кроме того, значение экземпляра обнуляемого объекта можно получить путем приведения к его базовому типу.
В следующей программе демонстрируется основной механизм обращения с обнуляемым типом.
// Продемонстрировать применение обнуляемого типа.
using System;
class NullableDemo {
static void Main() {
int? count = null;
if (count.HasValue)
Console.WriteLine("Переменная count имеет следующее значение: "
+ count.Value);
else
Console.WriteLine("У переменной count отсутствует значение");
count = 100;
if(count.HasValue)
Console.WriteLine("Переменная count имеет следующее значение: "
+ count. Value) ;
else
Console.WriteLine("У переменной count отсутствует значение");
}
}
Вот к какому результату приводит выполнение этой программы.
У переменной count отсутствует значение
Переменная count имеет следующее значение: 100
- Небезопасный код
- Обнуляемые типы
- Основы применения обнуляемых типов
- Применение обнуляемых объектов в выражениях
- Оператор ??
- Обнуляемые объекты, операторы отношения и логические операторы
- Частичные типы
- Частичные методы
- Создание объектов динамического типа
- Возможность взаимодействия с моделью СОМ
- Дружественные сборки
- Разные ключевые слова
- 7.1. Проверка типов термов
- ГЛАВА 1 Основы построения баз данных
- Пример применения метода «пять почему»
- Использование типов содержимого и столбцов
- 4.1 Сферы применения технологии Fibre Channel
- 5.3 Классификация типов резервного копирования
- 2.7 Преобразования типов
- Глава 1 Основы графологии
- Часть I Основы Ubuntu
- Описание типов модулей оперативной памяти
- Объекты без прототипов
- 2.10. Основы конфигурирования