什么是例外? InvalidCastException的

时间:2015-04-14 16:38:18

标签: c# asp.net

在旧版应用程序中,我们有一个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类型。我还检查过以确保它是线程安全的。

1 个答案:

答案 0 :(得分:1)

代码在位字段上失败的原因(与 boolean 相关)是由推断类型引起的。基础数据类型不是bool,而是bool?

一旦模型反映出可以为空的布尔值,代码就按预期工作。