Что означает паттерн матчинг с is, пустыми фигурными скобками и идентификатором после них?

Рейтинг: 0Ответов: 1Опубликовано: 25.05.2023
document.GetLanguageService<IRemoveUnnecessaryImportsService>() is { } removeUsingsService

Тот случай, когда уже перестаёшь понимать родной язык из-за частых изменений. Что тут происходит?

Ответы

▲ 2Принят

is { } это Property Matching (сопоставление свойств) без указания свойства, является эквивалентом is not null.

Например, у меня есть список List<T>, и я хочу чтобы выполнилось условие, если он не null и сожержит больше 0 элементов.

Раньше я бы написал так.

if (list != null && list.Count > 0) { }

Ну или так

if (list?.Count > 0) { }

А теперь это можно сделать так

if (list is { Count: > 0 }) { }

А если меня не интересует количество элементов в списке, то получится вот так

if (list is { }) { }

Документация

Ну и как в любом сопоставлении с is можно результат матчинга привести к целевому типу шаблона написав имя переменной после шаблона.

Общий вид синтаксиса будет выглядеть так

obj is <type>
{
    <property_name>: <condition> <constant>,
    <property_name>: <condition> <constant>
}
<assignment_variable>