Rumah > pembangunan bahagian belakang > C++ > Mengapa Jenis Nilai Nullable Tidak Boleh Digunakan Secara Terus sebagai Parameter Jenis Generik dalam C#?

Mengapa Jenis Nilai Nullable Tidak Boleh Digunakan Secara Terus sebagai Parameter Jenis Generik dalam C#?

Barbara Streisand
Lepaskan: 2025-01-05 15:58:43
asal
447 orang telah melayarinya

Why Can't Nullable Value Types Be Used Directly as Generic Type Parameters in C#?

Jenis Nullable sebagai Parameter Generik

Jenis nilai nullable, seperti int?, mewakili kemungkinan memegang nilai atau menjadi null. Walaupun mudah untuk mengendalikan data boleh nullable, terdapat had apabila menggunakannya sebagai parameter generik.

Pertimbangkan coretan kod berikut:

myYear = record.GetValueOrNull<int?>("myYear");
Salin selepas log masuk

Kod ini cuba untuk menetapkan nilai nullable yang dikembalikan oleh GetValueOrNull kepada pembolehubah int nullable (myYear). Walau bagaimanapun, pengkompil membuang ralat: "Jenis 'int?' mestilah jenis rujukan untuk menggunakannya sebagai parameter 'T' dalam jenis atau kaedah generik."

Isu di sini ialah GetValueOrNull ditakrifkan untuk mengembalikan jenis rujukan (objek), bukan nilai yang boleh dibatalkan taip. Untuk menyelesaikan masalah ini, tukar jenis pemulangan kepada Nullable dan panggil kaedah dengan parameter tidak boleh dibatalkan:

static void Main(string[] args)
{
    int? i = GetValueOrNull<int>(null, string.Empty);
}

public static Nullable<T> GetValueOrNull<T>(DbDataRecord reader, string columnName) where T : struct
{
    object columnValue = reader[columnName];

    if (!(columnValue is DBNull))
        return (T)columnValue;

    return null;
}
Salin selepas log masuk

Dengan menukar jenis pulangan kepada Nullable, kami memastikan kaedah tersebut mengembalikan jenis nilai nullable yang boleh ditetapkan kepada pembolehubah nullable seperti myYear .

Atas ialah kandungan terperinci Mengapa Jenis Nilai Nullable Tidak Boleh Digunakan Secara Terus sebagai Parameter Jenis Generik dalam C#?. 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