?? 操作员没有触发系统.DataTable DataRow中的DBNull类型

本文关键字:DataRow 中的 DBNull 类型 DataTable 操作员 系统 | 更新日期: 2023-09-27 18:14:17

这是。net c# String的后续问题。加入如何输出"空",而不是空字符串,如果元素值为空?其中答案建议使用??运算符来定义自定义空值,但替换从未被触发。

DataSet myDataSet = new DataSet();
mySqlDataAdapter.Fill(myDataSet);
DataTable rotationData = myDataSet.Tables["Table"];
rotationValues = string.Join(", ",
    from r in rotationData.Rows.OfType<DataRow>()
    select r[5] ?? "null");

当我将代码改为:

rotationValues = string.Join(", ",
    from r in rotationData.Rows.OfType<DataRow>()
    select r[5].GetType());

我可以观察到具有有效数据的元素的数据类型是System.Double,而为NULL的元素的数据类型是System.DBNull

?? 操作员没有触发系统.DataTable DataRow中的DBNull类型

??不作用于System.DBNull吗?

不,DBNullnull不是一回事。但是你可以这样写:

select r[5] == DBNull.Value ? "null" : r[5]);

另一种可能性是使用Field扩展方法,它将为您提供对指定行中每个列值的强类型访问,并且??操作符将工作。

select r.Field<string>(5) ?? "null";

??操作的是编程语言null,而不是数据库DBNull

从MSDN:

不要将面向对象编程语言中的null概念与DBNull对象混淆。在面向对象的编程语言中,null表示缺少对对象的引用。DBNull表示未初始化的变量或不存在的数据库列。