IsDbNull (int) обычно намного медленнее, чем использование методов, таких как GetSqlInt32, а затем сравнение с DBNull.Value или его собственным .IsNull Как:
public static int Int32(this SqlDataReader r, int ord)
{
var t = r.GetSqlInt32(ord);
return t.IsNull ? default(int) : t.Value;
}
Пробовал несколько шаблонных решений, но пока безрезультатно. Проблема заключается в том, что все типы Sql (здесь SqlInt32) на самом деле являются структурами, и хотя все они имеют свойство .Value, C # не имеет реальных шаблонов для обработки этого. Также у них есть собственный интерфейс INullable, который имеет только .IsNull и не совместим с Nyllable <>.
Я подозреваю, что потребуется полный набор Sql-типов в качестве шаблонов C # или для добавления к ним ICOnvertible, чтобы иметь возможность иметь только один или два шаблонных метода.
Если у кого-то есть идея с функциональной уловкой или двумя, говорите :-)