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

Продвинутый pattern matching

Проверяет расширенное сопоставление с образцом: свойства, списки, отношения и исчерпывающие ветвления. Вопросы затрагивают null, порядок arm-ов, неизвестные значения enum и тесты, которые не дают новому состоянию тихо попасть в общий default.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В заданиях с кодом учитывайте указанную конструкцию и не додумывайте отсутствующие условия. После завершения откроются общий результат, тематические шкалы и разбор каждого ответа.
Вопрос 1 из 25
Сработает ли pattern при customer == null?
C#
if (customer is { Address.City: "Tallinn" })
    ApplyLocalRules();
Вопрос 2 из 25
Как связать непустое имя с локальной переменной?
C#
if (person is { Name: { Length: > 0 } name })
    Console.WriteLine(name);
Вопрос 3 из 25
Что вернёт Describe?
C#
static string Describe(Customer c) => c switch
{
    { Active: true, Tier: >= 5 } => "vip",
    { Active: true } => "active",
    _ => "other"
};
Console.WriteLine(Describe(new Customer(true, 6)));
Вопрос 4 из 25
Почему общий { Active: true } нельзя ставить перед { Active: true, Tier: >= 5 }?
Вопрос 5 из 25
Что удобнее выразить extended property pattern?
C#
bool IsEstonian(Customer c) => c is { Address.Country.Code: "EE" };
Вопрос 6 из 25
Какие массивы совпадут с [1, 2]?
C#
bool ExactPair(int[] values) => values is [1, 2];
Console.WriteLine(ExactPair([1, 2, 3]));
Вопрос 7 из 25
Что проверяет [0, .., 9]?
C#
bool Framed(int[] values) => values is [0, .., 9];
Вопрос 8 из 25
Какой результат?
C#
static string Shape(int[] xs) => xs switch
{
    [] => "empty",
    [var a, var b] => "pair",
    _ => "many"
};
Console.WriteLine(Shape(new[] { 4, 5 }));
Вопрос 9 из 25
Почему произвольный IEnumerable<T> не всегда поддерживает list pattern?
Вопрос 10 из 25
Как захватить середину массива?
C#
if (values is [var first, .. var middle, var last])
    Console.WriteLine($"{first}/{middle.Length}/{last}");
Вопрос 11 из 25
Как выразить включительный диапазон 18..65?
Вопрос 12 из 25
Что вернёт Classify(0)?
C#
static string Classify(int x) => x switch
{
    < 0 => "negative",
    0 => "zero",
    > 0 => "positive"
};
Console.WriteLine(Classify(0));
Вопрос 13 из 25
Почему pattern is not null and { Length: > 0 } читается корректно?
Вопрос 14 из 25
Какой диапазон задаёт >= 0 and < 10?
C#
bool IsDigit(int x) => x is >= 0 and < 10;
Вопрос 15 из 25
Зачем скобки в not (>= 18 and <= 65)?
Вопрос 16 из 25
Почему switch по enum часто нуждается в _-ветви?
Вопрос 17 из 25
Какой подход лучше для невозможного состояния?
C#
return status switch
{
    Status.New => "new",
    Status.Done => "done",
    _ => throw new ArgumentOutOfRangeException(nameof(status), status, null)
};
Вопрос 18 из 25
Почему базовый класс Shape мешает полной проверке подтипов, если он открыт для наследования?
Вопрос 19 из 25
Что вернёт switch для null?
C#
static string Describe(object? value) => value switch
{
    null => "missing",
    int => "number",
    string => "text",
    _ => "other"
};
Вопрос 20 из 25
Когда discard _ с тихим fallback хуже исключения?
Вопрос 21 из 25
Какие значения минимально проверить для >=18 and <=65?
C#
Assert.False(IsWorkingAge(17));
Assert.True(IsWorkingAge(18));
Assert.True(IsWorkingAge(65));
Assert.False(IsWorkingAge(66));
Вопрос 22 из 25
Как проверить, что каждый enum-член имеет осмысленную ветвь?
Вопрос 23 из 25
Что журналировать при неизвестном состоянии протокола?
Вопрос 24 из 25
Почему property pattern полезно тестировать с null на каждом промежуточном объекте?
C#
Assert.False(IsEstonian(null));
Assert.False(IsEstonian(new Customer { Address = null }));
Assert.False(IsEstonian(new Customer { Address = new Address { Country = null } }));
Вопрос 25 из 25
Как генеративный тест помогает классификатору int?

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

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

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

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