Rumah >pembangunan bahagian belakang >C++ >Bagaimana Refleksi Boleh Menentukan Jenis Rujukan Boleh Null dalam .NET?

Bagaimana Refleksi Boleh Menentukan Jenis Rujukan Boleh Null dalam .NET?

Barbara Streisand
Barbara Streisandasal
2025-01-18 10:26:10240semak imbas

How Can Reflection Determine Nullable Reference Types in .NET?

Memanfaatkan Refleksi untuk Mengenalpasti Jenis Rujukan Boleh Null dalam .NET

C# 8.0 dan versi yang lebih baru memperkenalkan jenis rujukan yang boleh dibatalkan, peningkatan ketara untuk keselamatan kod. Jenis ini secara eksplisit menentukan sama ada harta boleh memegang nilai nol, dengan itu mengurangkan risiko pengecualian rujukan nol.

Pertimbangkan contoh ini:

<code class="language-csharp">public class Foo
{
    public string? Bar { get; set; }
}</code>

Imbuhan ? menetapkan Bar sebagai jenis rujukan boleh batal. Refleksi .NET menyediakan mekanisme untuk menentukan sama ada harta kelas menggunakan jenis rujukan boleh batal.

Kaedah 1: Menggunakan NullabilityInfoContext (.NET 6 dan lebih baru)

.NET 6 memperkenalkan NullabilityInfoContext API, menawarkan pendekatan yang diperkemas kepada pengesanan jenis boleh batal. Ini adalah kaedah yang disyorkan.

<code class="language-csharp">public static bool IsNullable(Type type)
{
    var context = type.GetNullabilityInfoContext();
    return context.ReadNullableAnnotation(type, out var annotation) && annotation == NullabilityState.Nullable;
}</code>

Kaedah 2: Pemeriksaan Atribut Manual (Pra-.NET 6)

Sebelum .NET 6, semakan atribut manual diperlukan. Fungsi pembantu ini memudahkan ini:

<code class="language-csharp">public static bool IsNullable(PropertyInfo property) => IsNullableHelper(property.PropertyType, property.DeclaringType, property.CustomAttributes);
public static bool IsNullable(FieldInfo field) => IsNullableHelper(field.FieldType, field.DeclaringType, field.CustomAttributes);
public static bool IsNullable(ParameterInfo parameter) => IsNullableHelper(parameter.ParameterType, parameter.Member, parameter.CustomAttributes);</code>

Fungsi IsNullableHelper mengkaji sifat-sifat ini:

  • System.Runtime.CompilerServices.NullableAttribute (Menunjukkan harta boleh batal)
  • System.Runtime.CompilerServices.NullableContextAttribute (Menunjukkan jenis penutup yang boleh batal)

Tafsiran Nilai Bait:

Kedua-dua atribut menggunakan nilai bait untuk kebolehbatalan:

  • 0: Tidak ditentukan (Boleh dibatalkan secara lalai)
  • 1: Tidak boleh batal
  • 2: Boleh dibatalkan

Kesimpulan:

Refleksi memberi kuasa kepada pembangun untuk mengenal pasti jenis rujukan boleh batal dalam sifat kelas. Keupayaan ini penting untuk mengekalkan keselamatan jenis dan mencegah pengecualian rujukan nol.

Atas ialah kandungan terperinci Bagaimana Refleksi Boleh Menentukan Jenis Rujukan Boleh Null dalam .NET?. 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