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返回任何内容。
答案 0 :(得分:3)
如果检查VB项目的参考,则会看到System.Data.DataSetExtensions.dll有一个。删除它,您将看到您的代码不再在VB中工作。看来VB编译器已被编写为以某种方式映射此映射:
Dim x = dt(0)
对此:
Dim x = dt.AsEnumerable().ElementAt(0)
,其中C#编译器不执行等效操作,您必须显式调用这些方法。对于VB编译器来说,做这些小的有用的事情隐藏了一些复杂性并不罕见。就个人而言,无论如何我总是使用Rows
属性。这样做并不麻烦。