Saya ingin melakukan sesuatu seperti ini:
myYear = record.GetValueOrNull<int?>("myYear"),
Perhatikan tipe nullable sebagai parameter generik.
Karena GetValueOrNullfungsi 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 structbatasan (dan sebagai efek samping tidak dapat kembali nulllagi):
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?
IDataRecordDbDataRecord