Eu quero fazer algo assim:
myYear = record.GetValueOrNull<int?>("myYear"),
Observe o tipo anulável como o parâmetro genérico.
Como a GetValueOrNull
função pode retornar nula, minha primeira tentativa foi a seguinte:
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;
}
Mas o erro que estou recebendo agora é:
O tipo 'int?' deve ser um tipo de referência para usá-lo como parâmetro 'T' no tipo ou método genérico
Certo! Nullable<int>
é um struct
! Então, tentei alterar a restrição de classe para uma struct
restrição (e como efeito colateral não pode mais retornar null
):
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : struct
Agora a tarefa:
myYear = record.GetValueOrNull<int?>("myYear");
Dá o seguinte erro:
O tipo 'int?' deve ser um tipo de valor não anulável para usá-lo como parâmetro 'T' no tipo ou método genérico
É possível especificar um tipo anulável como um parâmetro genérico?
IDataRecord
a partir deDbDataRecord
..