0Pricing
C# Academy · Урок

Свойства 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 — локальная установка не требуется.

Все уроки этого курса

  1. Знакомство с nullable-типами значений
  2. Свойства HasValue и Value
  3. Операторы объединения с null
  4. Nullable в вычислениях
← Назад к C# Academy