Chcę zrobić coś takiego:
myYear = record.GetValueOrNull<int?>("myYear"),
Zwróć uwagę na typ zerowalny jako parametr ogólny.
Ponieważ GetValueOrNull
funkcja może zwrócić null, moja pierwsza próba była następująca:
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;
}
Ale błąd, który teraz otrzymuję, to:
Wpisz „int?” musi być typem odniesienia, aby można go było używać jako parametru „T” w typie lub metodzie ogólnej
Dobrze! Nullable<int>
jest struct
! Próbowałem więc zmienić ograniczenie klasy na struct
ograniczenie (i jako efekt uboczny nie mogę już null
więcej powrócić ):
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : struct
Teraz zadanie:
myYear = record.GetValueOrNull<int?>("myYear");
Daje następujący błąd:
Wpisz „int?” musi być niedopuszczalnym typem wartości, aby użyć go jako parametru „T” w typie lub metodzie ogólnej
Czy w ogóle możliwe jest podanie typu zerowalnego jako parametru ogólnego?
IDataRecord
odDbDataRecord
...