Свойства HasValue и Value
Проверяйте и безопасно получайте nullable-значения.
«Свойства HasValue и Value» — бесплатный урок C# Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Два важных свойства
Каждый тип Nullable предоставляет HasValue (значение bool) и Value (базовое значение). Это инструменты для безопасной проверки Nullable.
using System;
class Program {
static void Main() {
int? n = 5;
Console.WriteLine(n.HasValue);
Console.WriteLine(n.Value);
}
}HasValue проверяет наличие значения
HasValue равно true, когда присутствует настоящее значение, и false, когда значение равно null.
using System;
class Program {
static void Main() {
int? a = 10;
int? b = null;
Console.WriteLine(a.HasValue);
Console.WriteLine(b.HasValue);
}
}Безопасное чтение Value
Всегда проверяйте HasValue перед чтением Value, поскольку чтение Value у значения null вызывает исключение.
using System;
class Program {
static void Main() {
int? n = 42;
if (n.HasValue) {
Console.WriteLine(n.Value * 2);
}
}
}Доступ к Value у null вызывает исключение
Если прочитать Value, когда значение Nullable равно null, C# вызывает исключение InvalidOperationException. Проверка защищает от этого.
using System;
class Program {
static void Main() {
int? n = null;
try {
Console.WriteLine(n.Value);
} catch (InvalidOperationException) {
Console.WriteLine("Caught: no value");
}
}
}GetValueOrDefault
GetValueOrDefault() возвращает значение, если оно есть, иначе — значение по умолчанию для типа (0 для int, false для bool).
using System;
class Program {
static void Main() {
int? n = null;
Console.WriteLine(n.GetValueOrDefault());
}
}GetValueOrDefault с запасным значением
Передайте аргумент, чтобы выбрать собственное запасное значение: GetValueOrDefault(99) возвращает 99, если значение равно null.
using System;
class Program {
static void Main() {
int? n = null;
Console.WriteLine(n.GetValueOrDefault(99));
int? m = 7;
Console.WriteLine(m.GetValueOrDefault(99));
}
}Шаблон: сначала проверить, затем использовать
Распространённый шаблон объединяет HasValue и Value в понятное ветвление.
using System;
class Program {
static void Describe(int? score) {
if (score.HasValue)
Console.WriteLine("Score is " + score.Value);
else
Console.WriteLine("No score yet");
}
static void Main() {
Describe(88);
Describe(null);
}
}Обратное неявное преобразование
Присвоить значение Nullable обычному типу можно только после подтверждения наличия значения, а затем чтения Value.
using System;
class Program {
static void Main() {
int? maybe = 15;
if (maybe.HasValue) {
int real = maybe.Value;
Console.WriteLine(real + 5);
}
}
}Значение Nullable по умолчанию
Если значение Nullable не задано явно, по умолчанию оно равно null, поэтому HasValue равно false.
using System;
class Program {
static void Main() {
int? n = default;
Console.WriteLine(n.HasValue);
}
}Использование в агрегатных вычислениях
Перебирайте данные, пропуская значения null с помощью HasValue, чтобы вычислять безопасные итоги.
using System;
class Program {
static void Main() {
int?[] readings = { 10, null, 5, null, 8 };
int sum = 0;
foreach (var r in readings)
if (r.HasValue) sum += r.Value;
Console.WriteLine(sum);
}
}GetValueOrDefault в циклах
GetValueOrDefault может упростить код, в котором значение null следует считать нулём.
using System;
class Program {
static void Main() {
int?[] readings = { 10, null, 5 };
int sum = 0;
foreach (var r in readings)
sum += r.GetValueOrDefault();
Console.WriteLine(sum);
}
}Быстрая проверка
Проверьте свои знания о свойствах Nullable.
Повторение
HasValue сообщает, содержит ли Nullable значение, а Value извлекает его, но чтение Value у значения null вызывает исключение.
GetValueOrDefault() безопасно возвращает значение или запасной вариант (значение по умолчанию для типа либо указанное Вами), поэтому идеально подходит для суммирования и безопасного чтения.
Часто задаваемые вопросы
Урок «Свойства HasValue и Value» бесплатный?
Да — полный текст урока «Свойства HasValue и Value» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Свойства HasValue и Value»?
Проверяйте и безопасно получайте nullable-значения. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Свойства HasValue и Value»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Знакомство с nullable-типами значений
- Свойства HasValue и Value
- Операторы объединения с null
- Nullable в вычислениях