Вот метод, который я создал, чтобы прочитать DBNull
и вернуть default(T)
incase:
private T GetNullable<T>(MySqlDataReader reader, int ordinal, Func<int, T> getValue)
{
if (reader.IsDBNull(ordinal))
{
return default(T);
}
return getValue(ordinal);
}
Может использоваться следующим образом:
if (reader.Read())
{
account = new Account();
account.Id = reader.GetInt32(0);
account.Name = reader.GetString(1);
account.MailVerifiedAt = GetNullable(reader, 2, reader.GetDateTime);
account.MailToken = GetNullable(reader, 3, reader.GetString);
}
Универсальный тип T
будет разрешен на основе возвращаемого значения reader.
- метода. Если он возвращает строку, вы получите null
incase DBNull
. Если это int
, он вернет 0
и т. Д.
Примечание: для целочисленных значений может быть нежелательно получать 0
, поэтому будьте осторожны.