使用 Mono.Cecil 我可以遍历System.Collections.Generic.List
(_items
,_size
,_version
等字段上的字段,但是如果我尝试使用它们,我总是得到异常
成员'T [] System.Collections.Generic.List`1 :: _ items'在另一个中声明 模块,需要导入
我有两个问题:
我已成功访问对象上的私有成员(只要它们不是编译器生成的),所以我假设(1)没问题。我也成功地导入了东西,虽然我承认我对导入工作方式的理解是不稳定的(也就是“如果它给出错误,只是尝试导入它”)。
答案 0 :(得分:3)
在编写指向它的IL之前,您需要将FieldDefinition导入ModuleDefinition。
所以看完你的代码之后就会有这样的事情。
var fieldReference = ModuleDefinition.Import(field);
Action<Collection<Instruction>> load = collection => collection.AddI(OpCodes.Ldfld, fieldReference);
我还注意到你有另一个错误。当您使用上面的代码时,您已经丢失了类型参数的上下文。因此,您尝试在List<T>
上调用某些内容而不是List<MyClass>
之类的内容。但如果你不能解决那个问题,你可以提出另一个问题:)