ADO.NET疯狂和可空类型

ADO.NET疯狂和可空类型,.net,generics,nullable,.net,Generics,Nullable,我好像掉进了兔子洞里。我想将ADO.NET数据集中的数据转换为可为null的类型。起初,我认为一个直接的演员(int?)可以做到这一点。我是多么天真。错了,大错特错。现在我正试图编写一个通用转换器,但在语法上遇到了麻烦。这是如此的2005年-一定有人已经解决了这个问题。有吗 问题在于,当我尝试在转换器上使用可为null的类型as on约束时,我会遇到一个语法错误: public class NullableDBConversion { public static T Convert<T

我好像掉进了兔子洞里。我想将ADO.NET数据集中的数据转换为可为null的类型。起初,我认为一个直接的演员(int?)可以做到这一点。我是多么天真。错了,大错特错。现在我正试图编写一个通用转换器,但在语法上遇到了麻烦。这是如此的2005年-一定有人已经解决了这个问题。有吗

问题在于,当我尝试在转换器上使用可为null的类型as on约束时,我会遇到一个语法错误:

public class NullableDBConversion
{
  public static T Convert<T>(object testValue) where T : Nullable<T>
  {
    if (testValue is DBNull)
    {
      return new Nullable<T>();
    }

    return new Nullable<T>((T)testValue);
  }
}
公共类NullableDBConversion
{
公共静态T转换(对象testValue),其中T:Nullable
{
if(testValue为DBNull)
{
返回新的Nullable();
}
返回新的可空((T)testValue);
}
}
目标是使用泛型实现所有转换的单一方法。这是可能的,还是我必须写几个。

T:Nullable
作为一个约束实际上没有意义-想想
T
应该是什么;它本身不能为空。你可以:

where T : Nullable<U> where U : struct
public static Nullable<T> Convert<T>(object testValue) where T : struct
{
    return testValue is DBNull ? null : new Nullable<T>((T)testValue);
}