Saya ingin melakukan sesuatu seperti ini:
myYear = record.GetValueOrNull<int?>("myYear"),
Perhatikan tipe nullable sebagai parameter generik.
Karena GetValueOrNull
fungsi tersebut dapat mengembalikan nol, upaya pertama saya adalah ini:
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : class
{
object columnValue = reader[columnName];
if (!(columnValue is DBNull))
{
return (T)columnValue;
}
return null;
}
Tapi kesalahan yang saya dapatkan sekarang adalah:
Jenis 'int?' harus menjadi tipe referensi untuk menggunakannya sebagai parameter 'T' dalam tipe atau metode umum
Baik! Nullable<int>
adalah struct
! Jadi saya mencoba mengubah batasan kelas menjadi struct
batasan (dan sebagai efek samping tidak dapat kembali null
lagi):
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : struct
Sekarang tugas:
myYear = record.GetValueOrNull<int?>("myYear");
Memberikan kesalahan berikut:
Jenis 'int?' harus merupakan tipe nilai yang tidak dapat dibatalkan untuk menggunakannya sebagai parameter 'T' dalam tipe atau metode umum
Apakah menetapkan jenis yang dapat dibatalkan sebagai parameter umum?
IDataRecord
DbDataRecord