Yanıtlar:
Bu sadece C # 8'deki boş özellik paterni, yani değer değil null. Herhangi bir değer türüyle veya referans türüyle eşleşir. Panagiotis Kanavos'un yorumlarda belirttiği gibi, bu value is objectuzun zamandır C # 'da olan eski iyi kontrole eşdeğerdir .
Genellikle bir mülk belirtirseniz, eşleşir veya eşleşmez. Bu ezoterik örnek şunları göstermektedir:
if (value is { Length: 2 })
{
// matches any object that isn't `null` and has a property set to a length of 2
}
Özellik kalıpları en iyi sonucu verir ve switchifadeler gibi durumlarda diğer kalıplarla karşılaştırıldığında daha açıktır .
sdefinitelly boş değil. is {}için steno olan is objectve dizeleri edebilir nesneye döküm.
!, !!, ?ve ??önce ve sonra özelliklerinin farklı anlamlara gelir. Sözdizimsel şeker ne zaman sona erecek?
value != nullmı?
Daniel'in yanıtı doğru olsa da, neden boş mülk modelini kullanımda gördüğünüze dair bir bağlam eklemek yararlı olabilir. Bazı doğrulamaların yapılması gereken bu örnek denetleyici yöntemini düşünün:
public async Task<IActionResult> Update(string id, ...)
{
if (ValidateId(id) is { } invalid)
return invalid;
...
}
Yukarıda, ValidateId()null veya bir örneği döndürebilir BadObjectRequestResult. Birincisi iade edilirse, doğrulama başarılı olur ve vücudunun geri kalanına geçer Update. İkincisi iade edilirse, is {}olduğu doğrudur (yani, tabii ki bir örneği BadObjectRequestResultbir olan object), ve doğrulama başarısız olur.
Güzel, bundan da değişken bir isim verdik, invalid hemen geri dönebileceğimiz . Bu olmadan biraz daha ayrıntılı koda ihtiyacımız olurdu.
public async Task<IActionResult> Update(string id, ...)
{
var invalid = ValidateId(id);
if (invalid != null)
return invalid;
...
}
Biri daha okunabilir veya diğeri okuyucuya bağlı olsun, boş özellik deseninin kullanılabileceği bir yol sundum.
is object invalid değilis {} invalid
IActionResultgerekli (teknik olarak iyi Task<IActionResult>). Tarzınızla gidersek if, aynı sonuç elde edilir, ancak invalidbu bir objectderleme olmayacaktır.