0Pricing
C# Academy · Урок

Защита от null

Проверка данных и шаблоны.

«Защита от null» — бесплатный урок C# Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

Зачем проверять значения null

Метод, получивший неожиданное значение null, часто завершается позже с непонятным исключением NullReferenceException где-то глубоко в стеке вызовов.

Проверка на null означает проверку аргументов в самом начале и понятное завершение работы, чтобы ошибка сразу указывала на настоящую причину.

Классическая проверка на null

Самая простая проверка — явная проверка, которая вызывает ArgumentNullException, если обязательный аргумент равен null.

Так Вы проверяете входные данные на границе метода, до начала любой работы.

void Save(string path)
{
    if (path == null)
        throw new System.ArgumentNullException(nameof(path));
    System.Console.WriteLine(path);
}

Использование nameof

Передавайте nameof(path), а не строку, записанную напрямую. Тогда исключение укажет точное имя параметра, и имя останется правильным, если Вы переименуете параметр.

Это значительно упрощает отладку, когда исключение записывается в журнал.

void Greet(string user)
{
    if (user is null)
        throw new System.ArgumentNullException(nameof(user));
    System.Console.WriteLine("Hi " + user);
}

Вспомогательный метод ThrowIfNull

Современный C# предоставляет ArgumentNullException.ThrowIfNull(arg). Он проверяет значение на null и автоматически вызывает исключение с правильным именем параметра.

Это лаконичный и предпочтительный стиль проверки в современном коде .NET.

void Process(object data)
{
    System.ArgumentNullException.ThrowIfNull(data);
    System.Console.WriteLine("Processing");
}

Рабочая проверка

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

Запустите её, чтобы увидеть сообщение исключения с именем некорректного параметра.

using System;

class Program
{
    static void Print(string text)
    {
        ArgumentNullException.ThrowIfNull(text);
        Console.WriteLine(text);
    }

    static void Main()
    {
        try { Print(null); }
        catch (ArgumentNullException ex) { Console.WriteLine(ex.ParamName); }
    }
}

Проверка с помощью ?? throw

Можно объединить присваивание и проверку, используя ?? вместе с throw. Так Вы проверяете значение и сохраняете его в одной строке.

Это популярный шаблон в конструкторах при присваивании значения полю.

class Service
{
    private readonly string _name;
    public Service(string name)
        => _name = name ?? throw new System.ArgumentNullException(nameof(name));
}

Пустое значение и null

Для строк значения null и пустая строка — разные проблемы. Используйте string.IsNullOrEmpty или string.IsNullOrWhiteSpace, чтобы одновременно обнаружить оба случая.

Для пустого, но не равного null значения подходит ArgumentException, а не ArgumentNullException.

void SetName(string name)
{
    if (string.IsNullOrWhiteSpace(name))
        throw new System.ArgumentException("Name required", nameof(name));
}

Проверка с помощью шаблонов

Шаблоны is null и is not null легко читаются, и их нельзя обмануть перегруженными операторами равенства.

Предпочитайте is null выражению == null, если тип может переопределять оператор ==.

object value = null;
if (value is null)
    System.Console.WriteLine("It is null");
if (value is not null)
    System.Console.WriteLine("Has value");

Значение по умолчанию вместо исключения

Не каждое значение null является ошибкой. Иногда разумное значение по умолчанию лучше, чем исключение.

Используйте ??, когда значение null допустимо, и вызывайте исключение только тогда, когда значение действительно обязательно.

string BuildPath(string folder)
{
    folder ??= "/tmp";
    return folder + "/file.txt";
}

Польза ссылочных типов, допускающих null

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

Объявление string (не допускает null) вместо string? (допускает null) документирует Ваш замысел и помогает анализатору.

#nullable enable
string required = "ok";
string? optional = null;
System.Console.WriteLine(optional?.Length ?? 0);

Проверка и безопасное использование

После проверки в начале метода остальная часть тела может использовать значение без повторяющихся проверок на null.

Эта программа сначала выполняет проверку, а затем уверенно использует аргумент.

using System;

class Program
{
    static int Length(string s)
    {
        ArgumentNullException.ThrowIfNull(s);
        return s.Length;
    }

    static void Main()
    {
        Console.WriteLine(Length("hello"));
    }
}

Быстрая проверка

Проверьте, насколько хорошо Вы поняли проверку на null.

Итоги

Проверяйте обязательные аргументы в начале метода. Используйте ArgumentNullException.ThrowIfNull или ?? throw вместе с nameof, чтобы получать понятные ошибки.

Используйте string.IsNullOrWhiteSpace для пустых строк, шаблоны is null для безопасных проверок и ??, когда вместо завершения с ошибкой допустимо значение по умолчанию.

Часто задаваемые вопросы

Урок «Защита от null» бесплатный?

Да — полный текст урока «Защита от null» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Защита от null»?

Проверка данных и шаблоны. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Защита от null»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Типы значений, допускающие null
  2. Оператор проверки на null
  3. Операторы объединения с null
  4. Защита от null
← Назад к C# Academy