使用SetOrdinal将列添加到DataTable

时间:2012-04-23 20:31:12

标签: c#

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

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之前添加的列有关,从而增加了超出列范围的计数?

3 个答案:

答案 0 :(得分:5)

“在执行SetOrdinal之前是否与要添加的列有关”

是。

在评估最后一部分时:

.SetOrdinal(dt.Columns.Count);

dt.Columns.Count == 6.一般来说,你应该避免使用引用同一语句中变化的复合语句。虽然评估顺序是可预测的,但它并不是特别直观 - 你最终会犯错误。这样更好:

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

甚至更好:

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

为了缩短代码,不要试图缩短代码。如果保存一些字符(这在编译代码中实际上没有任何意义)会使意图变得不那么明确,那么它绝对不值得。

答案 1 :(得分: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]

答案 2 :(得分:0)

DataColumn将从“ 0”开始

第一种方法是将一列添加到数据表中并使用SetOrdinal

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