Quiero hacer algo como esto:
myYear = record.GetValueOrNull<int?>("myYear"),
Observe el tipo anulable como parámetro genérico.
Como la GetValueOrNull
función podría devolver nulo, mi primer intento fue este:
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;
}
Pero el error que obtengo ahora es:
El tipo 'int?' debe ser un tipo de referencia para usarlo como parámetro 'T' en el tipo o método genérico
¡Correcto! Nullable<int>
es un struct
! Así que intenté cambiar la restricción de clase a una struct
restricción (y como efecto secundario no puede volver null
más):
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : struct
Ahora la tarea:
myYear = record.GetValueOrNull<int?>("myYear");
Da el siguiente error:
El tipo 'int?' debe ser un tipo de valor no anulable para poder usarlo como parámetro 'T' en el tipo o método genérico
¿Es posible especificar un tipo anulable como parámetro genérico?
IDataRecord
deDbDataRecord
..