C# C#  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Сложный  ·  👥 2 прошли

Nullable reference types

Разбирает nullable reference types как статический контракт, а не защиту времени выполнения. Проверяются потоковый анализ, оператор !, Try-паттерны, required/init и границы со старым или внешним кодом, где предупреждение легко подавить, но риск остаётся.

Отвечено: 0 из 25
--:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В заданиях с кодом учитывайте указанную конструкцию и не додумывайте отсутствующие условия. После завершения откроются общий результат, тематические шкалы и разбор каждого ответа.
Вопрос 1 из 25
Что означает string? при включённом nullable?
C#
string? optional = FindName();
if (optional is not null)
    Console.WriteLine(optional.Length);
Вопрос 2 из 25
Что означает параметр string name?
C#
public User Create(string name)
{
    ArgumentNullException.ThrowIfNull(name);
    return new User(name);
}
Вопрос 3 из 25
Меняется ли сигнатура CLR между string и string??
Вопрос 4 из 25
Что означает #nullable disable для старого файла?
C#
#nullable disable
string Legacy(string input) => null;
#nullable restore
Вопрос 5 из 25
Как выразить для generic-параметра контракт «nullable-значение здесь не ожидается»?
Вопрос 6 из 25
Почему после if (name is null) return; вызов name.Length безопасен?
C#
void Print(string? name)
{
    if (name is null) return;
    Console.WriteLine(name.Length);
}
Вопрос 7 из 25
Как изменится null-состояние переменной после повторного присваивания name = Find()?
Вопрос 8 из 25
Как сообщить анализатору, что EnsureNotNull бросает при null?
C#
static void Ensure([NotNull] object? value)
{
    if (value is null) throw new ArgumentNullException(nameof(value));
}
Ensure(candidate);
Console.WriteLine(candidate.ToString());
Вопрос 9 из 25
Почему условие obj?.Child != null позволяет использовать obj.Child в той же ветви не всегда удобно?
Вопрос 10 из 25
Какая запись одновременно извлекает и доказывает non-null?
C#
if (user.Name is { Length: > 0 } name)
    Console.WriteLine(name.ToUpperInvariant());
Вопрос 11 из 25
Что делает value! во время выполнения?
C#
string? value = GetPossiblyNull();
Console.WriteLine(value!.Length); // предупреждение скрыто, проверки нет
Вопрос 12 из 25
Что случится здесь?
C#
string? name = null;
Console.WriteLine(name!.Length);
Вопрос 13 из 25
Какой случай чаще оправдывает !?
Вопрос 14 из 25
Почему default! используют в некоторых generic/ORM-моделях?
C#
public string Name { get; private set; } = default!; // ORM заполняет при materialization
Вопрос 15 из 25
Что лучше вместо return cache[key]! при необязательном ключе?
Вопрос 16 из 25
Какой контракт удобен для поиска без исключения?
C#
public bool TryFind(Guid id, [NotNullWhen(true)] out User? user) =>
    _users.TryGetValue(id, out user);
Вопрос 17 из 25
Что лучше вернуть при отсутствии элементов, если отсутствие коллекции не имеет отдельного смысла?
Вопрос 18 из 25
Для чего required-свойство?
C#
public sealed class UserDto
{
    public required string Name { get; init; }
}
Вопрос 19 из 25
Когда бросать ArgumentNullException?
Вопрос 20 из 25
Почему string? GetDisplayName() лучше, чем string GetDisplayName() с неявным null?
C#
public string? GetDisplayName() =>
    string.IsNullOrWhiteSpace(Profile.DisplayName) ? null : Profile.DisplayName;
Вопрос 21 из 25
Как не допустить возврата nullable-долга?
Вопрос 22 из 25
Какой тест нужен для JSON-входа с обязательным Name?
C#
var dto = JsonSerializer.Deserialize<UserDto>("{\"name\":null}");
var result = validator.Validate(dto);
Assert.Contains(result.Errors, e => e.Field == "name");
Вопрос 23 из 25
Что записывать при NullReferenceException?
Вопрос 24 из 25
Как мигрировать большой legacy-раздел?
C#
<Nullable>enable</Nullable>
<WarningsAsErrors>nullable</WarningsAsErrors>
Вопрос 25 из 25
Почему счётчик NRE по версии полезен?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe)

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу