我记得有一些方法/属性直接呼吁之间的差异的DataTable类,并在该相同名称的方法/属性DataTable.Rows财产.(可能是我读过这个的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参考源); clearAll
只有在被召唤时才是真的DataTable.Clear
.
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); } } } }