c# - 使用 SetOrdinal 向 DataTable 添加列

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

最佳答案

“是否与执行 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);

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

关于c# - 使用 SetOrdinal 向 DataTable 添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10287791/

相关文章:

c# - 高级伪随机位生成

c# - ASP.NET MVC 自定义用户类与 System.Security.Principal.iPrincipal 发生冲突

c# - 在工作进程 C# 上验证 Youtube API

c# 将窗体固定到桌面

c# - 我应该模拟还是伪造我的存储库?

c# - MSChart 轴上的固定间隔

C# 如何在值太大时对 int 进行排序

c# - 流畅的多人游戏 Action

C#接口(interface)作为参数类型转换问题

c# - 在 C# 中实现三角反函数