使用 SetOrdinal 向数据表添加列

本文关键字:添加 数据表 SetOrdinal 使用 | 更新日期: 2023-09-27 18:31:58

假设我有一个包含五列的数据表。我很好奇为什么以下工作:

dt.Columns.Add("Blah").SetOrdinal(5);

但以下抛出了一个ArgumentOutOfRangeException

dt.Columns.Add("Blah").SetOrdinal(dt.Columns.Count);

我也试过

dt.Columns.Add("Blah").SetOrdinal(dt.Columns.Count - 1);

这有效,但我不完全确定为什么。它是否与在执行SetOrdinal之前添加的列有关,从而将计数增加到超出列的范围?

使用 SetOrdinal 向数据表添加列

"它是否与执行 SetOrdinal 之前添加的列有关"

是的。

在评估最后一个部件时:

.SetOrdinal(dt.Columns.Count);

DT.列计数 == 6。一般来说,您应该避免引用在同一语句中更改的内容的复合语句。虽然评估顺序是可预测的,但并不是特别直观——你最终会犯错误。这样更好:

var count = dt.Columns.Count;
dt.Columns.Add("Blah").SetOrdinal(count);

甚至更好:

dt.Columns.Add("Blah");
dt.Columns.SetOrdinal(dt.Columns.Count-1);
不要仅仅为了

缩短代码而试图使代码更短。如果保存几个字符(这在编译的代码中实际上没有任何意义)使意图变得不那么清晰,那么这绝对不值得。

数从零开始,使用Count时需要考虑这一点。

例:

dt.Columns.Count = 5;
//1. dt.Columns[0]
//2. dt.Columns[1]
//3. dt.Columns[2]
//4. dt.Columns[3]
//5. dt.Columns[4]

DataColumn 将从 "0"

开始第一次将列添加到数据表中并使用 SetOrdinal 的更好方法

DataColumn newcol=new DataColumn("Blah", typeof(string));
dt.Columns.Add(newcol);
newcol.SetOrdinal(dt.Columns.Count-1);