c# - 数据表行属性
问题描述
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 返回任何内容。
解决方案
如果您检查 VB 项目的引用,您会看到 System.Data.DataSetExtensions.dll 有一个。删除它,您会发现您的代码不再适用于 VB。似乎 VB 编译器已被编写为以某种方式映射此:
Dim x = dt(0)
对此:
Dim x = dt.AsEnumerable().ElementAt(0)
其中 C# 编译器不执行等效操作,您必须显式调用这些方法。VB 编译器做这些隐藏一些复杂性的小有用的事情并不罕见。就个人而言,无论如何我总是使用该Rows
物业。这样做并不麻烦。
推荐阅读
- javascript - 如何切换多个属性
- google-sheets - 数组公式中的动态范围而不使用间接?
- kubernetes - 如何使用自定义配置在 kubernetes 上部署 keycloak?
- oracle - ROracle 在 R 中创建阴影或不可见列
- django - 如何在 django、pytest、postgres 中应用迁移
- laravel - Laravel:过滤存在多个标签的用户
- r - R:未找到加载包“normalize_names_replacement_value”时的问题
- node.js - 无法使用 chrome 检查器为 nodejs 拍摄堆快照
- c++ - 如何使用 range-v3 压缩向量的向量
- c - 如何在 C 中使用 complex.h 读取复数?