在旧版应用程序中,我们有一个SqlDataReader
。以下字段创建InvalidCastException
,其中包含bit
字段。
public static T GetValueOrNull<T>(this IDataReader reader, string column)
{
int ordinal;
if(!string.IsNullOrEmpty(column) && !reader.IsDBNull(reader.GetOrdinal(column)))
if(int.TryParse(reader.GetOrdinal(column).ToString(), out ordinal))
return (T)reader.GetValue(ordinal);
return default(T);
}
奇怪的是,(T)reader.GetValue(ordinal)
确实指定了有效类型。它指定了false
,但错误仍然存在。我不完全确定原因。
如果我执行GetType();
,它确实会显示Boolean
类型。我还检查过以确保它是线程安全的。
答案 0 :(得分:1)
代码在位字段上失败的原因(与 boolean 相关)是由推断类型引起的。基础数据类型不是bool
,而是bool?
。
一旦模型反映出可以为空的布尔值,代码就按预期工作。