gpt4 book ai didi

.net - DataTable.Clear 和 DataTable.Rows.Clear 之间有区别吗?

转载 作者:行者123 更新时间:2023-12-02 02:35:10 27 4
gpt4 key购买 nike

我记得直接在 DataTable 上调用的一些方法/属性之间存在差异。类,以及 DataTable.Rows 上同名的方法/属性属性(property)。 (可能是我读到这篇文章的 RowCount/Count 属性。)区别在于其中之一忽略 DataRow.RowState ,其他人尊重/使用它。

在这种特殊情况下,我想知道 DataTable.Clear 之间的区别和 DataTable.Rows.Clear 。我可以想象其中一个实际上删除了所有行,而另一个只是将它们标记为已删除。

所以我的问题是,两种 Clear 方法之间是否有区别,如果有区别是什么?

(哦,顺便说一句,这是针对 .NET 1.1 的,以防语义从一个版本更改为另一个版本。)

最佳答案

在.Net 1.1中,DataRowCollection.Clear调用DataTable.Clear

但是,在 .Net 2.0 中,存在差异。如果我正确理解源代码,DataTable.Clear 将清除未附加的行(使用 DataTable.NewRow 创建),而 DataRowCollection.Clear 则不会。

区别在于 RecordManager.Clear(来源如下,来自 v3.5 SP 0 的 .Net Reference Source);仅当从 DataTable.Clear 调用时,clearAll 才为 true。

    internal void Clear(bool clearAll) { 
if (clearAll) {
for(int record = 0; record < recordCapacity; ++record) {
rows[record] = null;
}
int count = table.columnCollection.Count;
for(int i = 0; i < count; ++i) {
//

DataColumn column = table.columnCollection[i];
for(int record = 0; record < recordCapacity; ++record) {
column.FreeRecord(record);
}
}
lastFreeRecord = 0;
freeRecordList.Clear();
}
else { // just clear attached rows
freeRecordList.Capacity = freeRecordList.Count + table.Rows.Count;
for(int record = 0; record < recordCapacity; ++record) {
if (rows[record]!= null && rows[record].rowID != -1) {
int tempRecord = record;
FreeRecord(ref tempRecord);
}
}
}
}

关于.net - DataTable.Clear 和 DataTable.Rows.Clear 之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/166159/

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