首页 > 解决方案 > 数据表行属性

问题描述

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

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

C# 要求显式调用“行”属性:

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

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

标签: c#vb.net

解决方案


如果您检查 VB 项目的引用,您会看到 System.Data.DataSetExtensions.dll 有一个。删除它,您会发现您的代码不再适用于 VB。似乎 VB 编译器已被编写为以某种方式映射此:

Dim x = dt(0)

对此:

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

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


推荐阅读