Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Pengendali Bersyarat Null (?. ) C# 6.0 Menghalang NullReferenceExceptions?

Bagaimanakah Pengendali Bersyarat Null (?. ) C# 6.0 Menghalang NullReferenceExceptions?

Patricia Arquette
Lepaskan: 2025-01-25 15:31:09
asal
451 orang telah melayarinya

How Does C# 6.0's Null Conditional Operator (?. ) Prevent NullReferenceExceptions?

Penjelasan mendalam tentang pengendali bersyarat null C# 6.0: ?.

Pengendali ?. (pengendali bersyarat nol) yang diperkenalkan dalam C# 6.0 telah menarik perhatian meluas daripada pembangun. Ia menyediakan cara yang elegan untuk mengendalikan rujukan nol, menghasilkan kod yang lebih bersih dan cekap.

?. Penjelasan terperinci operator

Peranan teras pengendali

? adalah untuk menghalang kemungkinan pengecualian rujukan nol. Mekanisme kerjanya adalah seperti berikut:

  • Jika operan pertama bukan nol, operan kedua (akses ahli) dinilai.
  • Jika operan pertama kosong, kembalikan null dan bukannya membuang pengecualian.

Aplikasi praktikal: Mengelakkan pengecualian rujukan nol

Pertimbangkan contoh berikut:

<code class="language-csharp">public class A {
   public string PropertyOfA { get; set; }
}

...

var a = new A();
var foo = "bar";
if(a?.PropertyOfA != foo) {
   //somecode
}</code>
Salin selepas log masuk

Dalam contoh ini, operator ?. dengan elegan mengendalikan kes di mana a mungkin kosong. Jika a kosong, a?.PropertyOfA akan mengembalikan null, mengelakkan NullReferenceException yang disebabkan oleh perbandingan seterusnya. Jika a bukan kosong, a.PropertyOfA dinilai dan dibandingkan dengan foo.

Persamaan dengan pernyataan bersyarat

Pengendali bersyarat kosong adalah seperti pernyataan bersyarat yang dipermudahkan:

<code class="language-csharp">string bar = (a == null ? null : a.PropertyOfA);
if (bar != foo)
{
    ...
}</code>
Salin selepas log masuk

Namun, pengendali ?. menyediakan alternatif yang lebih bersih dan cekap.

Nota tentang penukaran jenis

Perlu diingat bahawa menggunakan operator ? boleh menjejaskan jenis ungkapan. Sebagai contoh, jika sifat mengembalikan data jenis panjang, menggunakan operator bersyarat nol akan menghasilkan ungkapan jenis panjang?:

<code class="language-csharp">FileInfo fi = ...; // fi可能为空
long? length = fi?.Length; // 如果fi为空,length将为空</code>
Salin selepas log masuk

Ringkasan

Operator ? Dengan ciri berkuasa ini, pembangun boleh menulis kod yang lebih mantap dan cekap, mengurangkan kemungkinan pengecualian yang tidak dijangka dan meningkatkan kebolehbacaan kod.

Atas ialah kandungan terperinci Bagaimanakah Pengendali Bersyarat Null (?. ) C# 6.0 Menghalang NullReferenceExceptions?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan