Я хочу зробити щось подібне:
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' у загальному типі чи методі
Чи взагалі можливе визначення нульового типу як загального параметра?
IDataRecord
відDbDataRecord
..