System.Data.DataTable、DataRowCollection和DataColumns:索引是如何工作的
本文关键字:何工作 工作 索引 DataTable Data DataRowCollection DataColumns System | 更新日期: 2023-09-27 17:59:25
在DataTable
:中
我可以访问所有的DataRow
元素,比如:
DataTable table = GetMyTable();
for (int i = 0; i < table.Rows.Count; i++) {
DataRow row = table.Rows[i];
Console.WriteLine(row);
}
此外,我可以访问所有DataColumn
元素,如下所示:
DataTable table = GetMyTable();
for (int i = 0; i < table.Columns.Count; i++) {
DataColumn column = table.Columns[i];
Console.WriteLine(column);
}
最后,我可以访问DataTable
对象的每个单独的Cell
,如下所示:
DataTable table = GetMyTable();
for (int i = 0; i < table.Rows.Count; i++) {
DataRow row = table.Rows[i];
object[] array = row.ItemArray;
for (int j = 0; j < array.Length; j++) {
object cell = array[j];
Console.WriteLine(cell);
}
}
至少在第三种技术中看起来有些信息丢失了。
这是我的问题:这个对象数组是如何管理的
我一直在研究如何用这种基本类型的功能重新创建一些东西(因为我已经很熟悉了),但我只是不知道如何设计所有这些小的子类来让它工作!
建立一个简单的类关系并不困难:
class Table
{
public IEnumerable<Row> Rows { get; set; }
}
class Row
{
public IEnumerable<Cell> Cells { get; set; }
}
class Cell { }
该表有一个DataColumn
列表。这是列定义的列表。该表有一个行列表。对于列列表中的每一列,每一行都有一个单元格。
诀窍在于,行是由表创建的。该表知道Columns
集合的长度,以及列的数据类型和对它们的任何约束。当表创建DataRow
时,它会使用正确的列数来创建它。
它可以简单到:
List<object[]> Rows {get; private set;}
这让你可以像一样访问它
obj[5][3]="meep.";
在实际的DataTable
中,object[]
被封装在DataRow
类中,该类提供诸如Field<>
之类的访问功能,并且List<>
通过DataRowCollection
类向外部暴露更有限的信息量。