Відповіді:
Це просто порожній шаблон властивості в C # 8, тобто значення не null. Він відповідає будь-якому типу значення або еталонному типу. Як зазначає у коментарях Панайотис Канавос, це рівнозначно старому доброму value is objectчеку, який тривалий час у C #.
Як правило, якби ви вказали властивість, то він би відповідав чи ні. Цей езотеричний приклад ілюструє, що:
if (value is { Length: 2 })
{
// matches any object that isn't `null` and has a property set to a length of 2
}
Шаблони властивостей найкраще працюють і є найбільш зрозумілими при порівнянні з іншими шаблонами у таких випадках, як switchвирази.
sоднозначно не є нульовим. is {}є скороченням, is objectі рядки можуть бути передані об'єкту.
!, !!, ?і ??до і після властивості означає різні речі. Коли закінчиться синтаксичний цукор?
value != null?
Хоча відповідь Даніеля правильна, я думаю, що може бути корисним додати деякий контекст про те, чому ви можете бачити порожній шаблон властивості у використанні. Розглянемо цей приклад методу контролера, який потребує певної перевірки:
public async Task<IActionResult> Update(string id, ...)
{
if (ValidateId(id) is { } invalid)
return invalid;
...
}
У вищесказаному, ValidateId()можна повернути null або екземпляр BadObjectRequestResult. Якщо перше повертається, перевірка проходить успішно і переходить до іншої частини тіла Update. Якщо останній повертається, is {}є істинним (тобто, звичайно, екземпляр BadObjectRequestResultє an object), і перевірка завершується невдаче.
Непогано, що ми також дали ім'я змінної invalid, до якого ми можемо повернутися негайно. Без цього нам знадобиться трохи більше деталізованого коду.
public async Task<IActionResult> Update(string id, ...)
{
var invalid = ValidateId(id);
if (invalid != null)
return invalid;
...
}
Незалежно від того, чи читається одна чи інша - це читач, я тільки що представив один із способів використання порожньої структури властивостей.
is object invalid, а неis {} invalid
IActionResultце технічно Task<IActionResult>). Якщо ми підемо з вашим стилем, результат ifмає той самий результат, але invalidбуде objectтаким, що не буде компілюватися.