Mono.Cecil导入列表枚举器

时间:2013-04-09 06:39:03

标签: .net mono mono.cecil

我正在使用Mono.Cecil做一些IL编织,我遇到了这个问题:

Member 'System.Collections.Generic.List`1/Enumerator' is declared in
another module and needs to be imported

如何导入具有列表枚举器的模块?

我有TypeReference(System.Collections.Generic.List`1< blah>),我正在使用它来获取枚举器,如下所示:

var instanceType = (typeReference as GenericInstanceType);
var list = instanceType.Resolve();

MethodDefinition getEnumerator;
if (!list.TryGetMethod("GetEnumerator", out getEnumerator))
    throw ...

...其中TryGetMethod是一个自定义扩展程序,用于搜索具有该名称的方法的类型。

然后我在代码中进一步使用getEnumerator,如下所示:

instructions.Add(Instruction.Create(OpCodes.Callvirt, getEnumerator));

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我明白了。要获取列表的枚举器,您需要为MethodReference方法获取GetEnumerator,如下所示:

Type listType = typeof (List<>);

MethodReference getEnumerator = moduleDefinition
    .Import(listType.GetMethod("GetEnumerator"));