【发布时间】:2013-04-17 10:11:35
【问题描述】:
使用 Mono.Cecil 我可以遍历 System.Collections.Generic.List 上的字段(_items、_size、_version 等),但是如果我尝试使用它们,我总是获取异常
成员 'T[] System.Collections.Generic.List`1::_items' 在另一个中声明 模块,需要导入
对此我有两个问题:
- 不能访问泛型的底层字段吗?
- 如果可能,导入语句会是什么样子?
我已经成功访问了对象上的私有成员(只要它们不是编译器生成的),所以我假设 (1) 没问题。我也成功地导入了一些东西,尽管我承认我对导入的工作原理的理解是不稳定的(也就是“如果出现错误,请尝试导入它”)。
【问题讨论】:
-
您能否提供一个简短但完整的失败示例?你能用普通反射而不是塞西尔来重现这个吗? (这会让其他人更容易复制。)
-
不完全符合您的要求,但我已经在我的项目中创建了一个分支,您可以使用它通过
git clone -b list_import --single-branch git@github.com:JesseBuesking/BB.DeepCopy.git复制它。为要编织的 il 运行任何测试(测试将因此失败,因此您将能够在测试输出中看到错误)。今天我将尝试使用反射来重现这一点。 -
后续:可以在
ModuleWeaver.cs的第941行设置断点。从那里遍历代码将带您完成尝试访问列表对象上的字段的过程。
标签: c# mono mono.cecil