Я хочу сделать что-то вроде этого:
myYear = record.GetValueOrNull<int?>("myYear"),
Обратите внимание на тип с нулевым значением в качестве общего параметра.
Так как функция GetValueOrNull
могла возвращать null, моя первая попытка состояла в следующем:
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;
}
Но ошибка, которую я получаю сейчас, это:
Тип 'int?' должен быть ссылочным типом, чтобы использовать его как параметр 'T' в родовом типе или методе
Right! Nullable<int>
является struct
! Поэтому я попытался изменить ограничение класса на ограничение struct
(и, поскольку побочный эффект больше не может вернуть null
):
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : struct
Теперь задание:
myYear = record.GetValueOrNull<int?>("myYear");
Дает следующую ошибку:
Тип 'int?' должен быть недействительным типом значения, чтобы использовать его как параметр 'T' в родовом типе или методе
Указывает тип NULL как общий параметр на всех возможных?