gpt4 book ai didi

.net - 应该使用IsDBNull和IsNull中的哪个?

转载 作者:行者123 更新时间:2023-12-03 14:39:22 25 4
gpt4 key购买 nike

如果在VB.NET中有DataRow,并且我想测试列值是否为Null,则应使用:

myDataRow.IsNull("Column1")


要么

IsDBNull(myDataRow("Column1"))

最佳答案

简短的答案:使用第一种方法,速度更快,因为第一种方法使用预先计算的结果,而第二种方法则需要在每次调用时即时对其进行重新计算。

长答案:(您需要阅读C#代码才能理解此部分; MS使用C#提供框架代码,但VB程序员应该能够大致了解正在发生的事情)

这是IsNullDataRow调用内部发生的情况:

public bool IsNull(string columnName) {
DataColumn column = GetDataColumn(columnName);
int record = GetDefaultRecord();
return column.IsNull(record);
}


column.IsNull执行快速断言,并将调用转发到内部类 DataStorage

internal bool IsNull(int record) {
Debug.Assert(null != _storage, "no storage");
return _storage.IsNull(record);
}


最后,这是 _storage.IsNull的作用:

public virtual bool IsNull(int recordNo) {
return this.dbNullBits.Get(recordNo);
}


由于 dbNullBitsBitArray,因此此操作很快完成。

现在考虑索引器 myDataRow("Column1")的功能(在将其结果传递给 IsDBNull之前调用此索引器):

get {
DataColumn column = GetDataColumn(columnName);
int record = GetDefaultRecord();
_table.recordManager.VerifyRecord(record, this);
VerifyValueFromStorage(column, DataRowVersion.Default, column[record]);
return column[record];
}


请注意, IsNull方法的前两行与索引器相同。但是,接下来的三行需要执行验证,并获取值本身。只有在此之后,您的代码才能开始计算其目标值-指示其目标值是否为 DBNull的标志。这需要更多的计算,但是更重要的是,每次执行检查时都需要进行一些计算。这比使用预先计算的值要慢。

关于.net - 应该使用IsDBNull和IsNull中的哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17548023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com