访问System.Collections.Generic.List上的属性

时间:2013-04-24 02:02:27

标签: c# mono mono.cecil

使用 Mono.Cecil 我可以遍历System.Collections.Generic.List_items_size_version等字段上的字段,但是如果我尝试使用它们,我总是得到异常

  

成员'T [] System.Collections.Generic.List`1 :: _ items'在另一个中声明      模块,需要导入

我有两个问题:

  1. 是否无法访问泛型的基础字段?
  2. 如果可能的话,导入语句会是什么样的呢?
  3. 我已成功访问对象上的私有成员(只要它们不是编译器生成的),所以我假设(1)没问题。我也成功地导入了东西,虽然我承认我对导入工作方式的理解是不稳定的(也就是“如果它给出错误,只是尝试导入它”)。

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>之类的内容。但如果你不能解决那个问题,你可以提出另一个问题:)