【发布时间】:2017-12-06 23:41:42
【问题描述】:
我正在编写一个函数来检查输出是否为DBNull,如果泛型类型可以为空则返回null。如果不是,它只会抛出错误。
更新:添加了所有建议
public T Get<T>(string key)
{
int ordinal = reader.GetOrdinal(key);
if (reader.IsDBNull(ordinal))
{
if (typeof(T).GetTypeInfo().IsValueType && Nullable.GetUnderlyingType(typeof(T)) == null) // isn't a nullable field
throw new InvalidCastException();
else return default(T);
}
return reader.GetFieldValue<T>(ordinal);
}
但是我不确定default(T) 是否为每个可空字段返回空值。如果现在还有其他方法可以让它返回 null 吗?
【问题讨论】:
-
我不确定
reader.GetFieldType(key)是否通常会返回DBNull- 这是否有效?我会期望返回代表该列将包含的内容如果它不为空 -
只是作为一个建议(除了 Marc 的回答/评论),反转
if语句(如果它是 not null,return ...;),并取消elses 只是一个throw...;
标签: c# generics nullable default-value mysql-connector