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");
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
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; }
Dengan menukar jenis pulangan kepada Nullable
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!