VB 允许在 System.Data.DataTable 类型上直接建立索引,而不是调用“行”属性。 “行”不是索引器,而是返回 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 返回任何内容。
最佳答案
如果您查看 VB 项目的引用资料,您会发现其中有一个用于 System.Data.DataSetExtensions.dll。删除它,您将看到您的代码不再适用于 VB。看来 VB 编译器已被写入以某种方式映射此:
Dim x = dt(0)
为此:
Dim x = dt.AsEnumerable().ElementAt(0)
C# 编译器不执行等效操作,您必须显式调用这些方法。 VB 编译器执行这些隐藏一些复杂性的小有用的事情并不少见。就个人而言,我总是使用 Rows
属性。这样做并不麻烦。
关于c# - DataTable 行属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55173624/