DataTable行属性

时间:2019-03-14 23:45:51

标签: c# vb.net

VB允许直接在System.Data.DataTable类型上建立索引,而不是调用'Rows'属性。 “行”不是索引器,而是返回DataRowCollection的常规属性。

Dim dt As New DataTable()
Dim x = dt(0) 'instead of Dim x = dt.Rows(0)

C#要求显式调用'Rows'属性:

DataTable dt = new DataTable();
var x = dt.Rows(0);

这是为什么?有没有一种方法可以使用反射找到这种行为?反射方法GetDefaultMembers不会为System.Data.DataTable返回任何内容。

1 个答案:

答案 0 :(得分:3)

如果检查VB项目的参考,则会看到System.Data.DataSetExtensions.dll有一个。删除它,您将看到您的代码不再在VB中工作。看来VB编译器已被编写为以某种方式映射此映射:

Dim x = dt(0)

对此:

Dim x = dt.AsEnumerable().ElementAt(0)

,其中C#编译器不执行等效操作,您必须显式调用这些方法。对于VB编译器来说,做这些小的有用的事情隐藏了一些复杂性并不罕见。就个人而言,无论如何我总是使用Rows属性。这样做并不麻烦。