Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan sama ada Jenis Nilai dalam C# boleh dibatalkan?

Bagaimanakah Saya Boleh Menentukan sama ada Jenis Nilai dalam C# boleh dibatalkan?

Patricia Arquette
Patricia Arquetteasal
2025-01-13 11:58:42446semak imbas

How Can I Determine if a Value Type in C# is Nullable?

Semak jenis nilai nullable

Menentukan kebolehbatalan objek ialah masalah biasa apabila berurusan dengan jenis nilai. Apabila menyemak jenis nilai nullable, anda mesti membezakan antara jenis nilai nullable dan jenis rujukan nullable. Dalam kes ini, kita perlu mengenal pasti jenis nilai yang secara tersirat boleh mengandungi nilai nol. Begini cara untuk mencapainya:

<code class="language-csharp">bool IsNullableValueType(object o)
{
    if (o == null) return true; // 显而易见的情况
    Type type = o.GetType(); // 修正:使用 o.GetType() 获取对象的实际类型
    if (!type.IsValueType) return true; // 引用类型
    if (Nullable.GetUnderlyingType(type) != null) return true; // Nullable<T>
    return false; // 值类型
}</code>

Kaedah ini menilai jenis objek:

  • Jika objek adalah batal, ia dianggap boleh batal.
  • Sesuatu objek juga boleh dibatalkan jika ia adalah jenis rujukan (bukannya jenis nilai).
  • Sesuatu objek boleh dibatalkan jika jenis asasnya boleh dibatalkan (ditentukan oleh Nullable.GetUnderlyingType).
  • Jika tidak, ia adalah jenis nilai yang tidak boleh dibatalkan.

Dalam contoh anda, bc.myBool merujuk kepada nilai bool yang tidak boleh dibatalkan dan obj tidak akan menjadi contoh Nullable<bool> . Untuk mengendalikan situasi ini, buat pembalut boleh batal di sekeliling IsNullableValueType(bc.myBool) hanya jika true menilai kepada obj .

Arahan penambahbaikan kod: Terdapat ralat dalam Type type = typeof(T); dalam kod asal kerana T tidak ditakrifkan. Ini telah diperbetulkan kepada Type type = o.GetType();, menggunakan jenis masa jalan objek untuk penghakiman.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan sama ada Jenis Nilai dalam C# boleh dibatalkan?. 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