Saya melihat kode berikut kadang-kadang, dan tidak tahu apa ekspresi yang sebenarnya diuji.
public static void Something(string[] value)
{
if (value is { })
{
DoSomethingElse();
}
}
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 singkatanis 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:
Di atas,
ValidateId()
dapat mengembalikan nol atau turunan dariBadObjectRequestResult
. Jika yang pertama dikembalikan, validasi berhasil dan pindah ke seluruh tubuhUpdate
. Jika yang terakhir dikembalikan,is {}
itu benar (yaitu tentu saja contohBadObjectRequestResult
adalahobject
), 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.Apakah satu lebih mudah dibaca atau yang lain terserah pembaca, saya baru saja disajikan satu cara pola properti kosong dapat digunakan.
sumber
is object invalid
, bukanis {} invalid
IActionResult
diperlukan (baik secara teknisTask<IActionResult>
). Jika kami menggunakan style Anda,if
hasilnya sama tetapiinvalid
akanobject
jadi ini tidak akan dikompilasi.Saya pikir ini untuk memeriksa apakah nilainya adalah objek kosong
sumber