Відповіді:
Це просто порожній шаблон властивості в 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
таким, що не буде компілюватися.