?? 操作员没有触发系统.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
。
??
不作用于System.DBNull
吗?不,DBNull
和null
不是一回事。但是你可以这样写:
select r[5] == DBNull.Value ? "null" : r[5]);
另一种可能性是使用Field
扩展方法,它将为您提供对指定行中每个列值的强类型访问,并且??
操作符将工作。
select r.Field<string>(5) ?? "null";
??
操作的是编程语言null
,而不是数据库DBNull
。
不要将面向对象编程语言中的null概念与DBNull对象混淆。在面向对象的编程语言中,null表示缺少对对象的引用。DBNull表示未初始化的变量或不存在的数据库列。