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
Patricia Arquetteasal
2025-01-25 15:31:09499semak imbas

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>

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>

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>

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!

Kenyataan:
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