【问题标题】:How to convert nullable type to its underlying type?如何将可空类型转换为其基础类型?
【发布时间】:2013-09-10 13:34:59
【问题描述】:

出于某种特殊原因,我不得不将数据存储到 DataTable 中,并意识到它不支持可为空的类型:抛出 System.NotSupportedException:DataSet 不支持 System.Nullable。有没有比枚举类型和为每个可空类型编写自定义代码更有效的转换方法?

【问题讨论】:

  • 你可以使用反射来做到这一点,但为什么不直接在数据表中赋值呢?

标签: .net type-conversion nullable


【解决方案1】:

但它支持可空类型,AllowDbNull 默认为true

var table = new DataTable();
table.Columns.Add("NullableInt", typeof(int));
table.Rows.Add(1);
table.Rows.Add(2);
table.Rows.Add(3);
table.Rows.Add((int?)null);

使用支持可空类型的DataRowextension methods,例如:

foreach(DataRow row in table.Rows)
{
    int? value = row.Field<Int32?>("NullableInt");
    // modify the value with SetField:
    row.SetField<Int32?>("NullableInt", null); 
    // or: 
    row.SetField("NullableInt", (int?)null);
}

【讨论】:

  • 第二行抛出 System.NotSupportedException: DataSet 不支持 System.Nullable。
  • @amuliar:你使用typed DataSet还是普通的DataSet/DataTable
  • 我刚刚在新创建的应用程序中使用了你的第一个代码。它抛出一个异常: static void Main(string[] args) { var table = new DataTable(); table.Columns.Add("NullableInt", typeof(Int32?)); }
  • @amuliar:现在我可以测试我的代码了,之前我没有 IDE。相应地编辑了我的答案。
猜你喜欢
  • 2017-03-30
  • 2013-01-13
  • 1970-01-01
  • 2022-01-22
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多