.net - ADO.NET 疯狂和可空类型

标签 .net generics nullable

我好像掉进了兔子洞。我想将 ADO .NET 数据集中的数据转换为 Nullable 类型。起初我假设直接 Actor (int?)会做到这一点。我是多么天真。错了,大错特错。现在我正在尝试编写一个通用转换器,但我对语法很感兴趣。这是 2005 年 - 一定有人已经解决了这个问题。你有吗?

问题在于,当我尝试在转换器上使用可空类型作为约束时,出现语法错误:

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);
  }
}

目标只有一个方法,使用泛型来完成所有转换。这是可能的还是我必须写几个。

最佳答案

T : Nullable<T>作为约束并没有真正意义 - 想想什么 T必须是;它本身不能为空。你可以:

where T : Nullable<U> where U : struct

但这会有些晦涩难懂。我认为制作 T 更容易不可空类型,仅引用 Nullable<T> .我想你想要这个:

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

关于.net - ADO.NET 疯狂和可空类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/870830/

相关文章:

c# - 删除测试后的 MSTest 空目录

Scala:通用函数乘以不同类型的数字

c# - 返回可为空的字符串类型

c# - 在哪里可以找到 C#、Sql 服务器的错误代码列表及其消息?

c# - 将 SQL 数据读取器数据加载到 DataTable 时遇到问题

java - 编译时的工厂模式

C# - 空检查方法

c# - C#中的 'int?'和 'int'有什么区别?

c# - 在 .Net 中获取 CryptoStream 的长度

c# - 使用 Linq 比较两个通用列表