Jawaban:
Itu hanya pola properti kosong di C # 8, artinya nilainya tidak null
. Ini cocok dengan semua tipe nilai atau tipe referensi. Seperti yang dicatat oleh Panagiotis Kanavos di komentar, ini setara dengan value is object
cek lama yang baik yang telah di C # untuk waktu yang lama.
Umumnya jika Anda menentukan properti, maka itu akan cocok atau tidak. Contoh esoterik ini menggambarkan bahwa:
if (value is { Length: 2 })
{
// matches any object that isn't `null` and has a property set to a length of 2
}
Pola properti bekerja paling baik dan paling jelas ketika membandingkan dengan pola lain dalam kasus seperti switch
ekspresi.
s
secara definitelly bukan nol. is {}
adalah singkatan is object
dan string dapat dilemparkan ke objek.
!
, !!
, ?
dan ??
sebelum dan sesudah sifat berarti hal yang berbeda. Kapan gula sintaksis menjadi mutakhir?
value != null
?
Sementara jawaban Daniel benar, saya pikir mungkin berguna untuk menambahkan beberapa konteks tentang mengapa Anda dapat melihat pola properti kosong yang digunakan. Pertimbangkan contoh metode pengontrol ini yang perlu dilakukan validasi:
public async Task<IActionResult> Update(string id, ...)
{
if (ValidateId(id) is { } invalid)
return invalid;
...
}
Di atas, ValidateId()
dapat mengembalikan nol atau turunan dari BadObjectRequestResult
. Jika yang pertama dikembalikan, validasi berhasil dan pindah ke seluruh tubuh Update
. Jika yang terakhir dikembalikan, is {}
itu benar (yaitu tentu saja contoh BadObjectRequestResult
adalah object
), dan validasi gagal.
Baik, dari sini kami juga memberikan nama variabel invalid
, yang dapat segera kami kembalikan. Tanpa itu kita perlu kode verbose sedikit lebih.
public async Task<IActionResult> Update(string id, ...)
{
var invalid = ValidateId(id);
if (invalid != null)
return invalid;
...
}
Apakah satu lebih mudah dibaca atau yang lain terserah pembaca, saya baru saja disajikan satu cara pola properti kosong dapat digunakan.
is object invalid
, bukanis {} invalid
IActionResult
diperlukan (baik secara teknis Task<IActionResult>
). Jika kami menggunakan style Anda, if
hasilnya sama tetapi invalid
akan object
jadi ini tidak akan dikompilasi.