← Все вопросы

Что такое nullable типы (int?) и как с ними работать в C#?

Задан 19 месяцев назад1.5к просмотров2 ответа
8

Увидел запись int? со знаком вопроса. Чем int? отличается от обычного int и как безопасно достать значение?

int? age = null;

2 ответа

14
✓ Принятый ответ — помог автору

Обычные типы-значения (int, bool, DateTime) не могут быть null. Nullable-тип (int?, он же Nullable<int>) добавляет к ним возможность хранить ещё и null — удобно для «значения нет» (например, поле из БД).

int a = null;   // ОШИБКА — int не принимает null
int? b = null;  // ОК
int? c = 42;    // тоже ОК

Как безопасно работать:

int? age = GetAge();

// проверка наличия значения
if (age.HasValue)
    Console.WriteLine(age.Value);

// значение по умолчанию, если null
int result = age ?? 0;          // 0, если age == null

// или через метод
int result2 = age.GetValueOrDefault(18);

Важно: не читайте .Value без проверки — если внутри null, получите InvalidOperationException. Безопаснее ?? или HasValue. Не путайте int? (nullable value type) с nullable reference types (string? из C# 8) — это похожая идея, но реализована иначе.

5

Ещё нюанс — арифметика с nullable «заразна»: если хоть один операнд null, результат тоже null.

int? x = 5;
int? y = null;
int? sum = x + y;   // null, а не 5!
Console.WriteLine(sum ?? -1); // -1

И сравнения: null > 5 даёт false, поэтому будьте аккуратны с условиями на nullable-числах.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект