Я хочу сделать что-то вроде этого:
myYear = record.GetValueOrNull<int?>("myYear"),
Обратите внимание на обнуляемый тип в качестве универсального параметра.
Так как GetValueOrNull
функция могла вернуть ноль, моя первая попытка была такой:
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' в универсальном типе или методе
Правильно! 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 в качестве универсального параметра?
IDataRecord
отDbDataRecord
..