1

我正在用 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));

我究竟做错了什么?

4

1 回答 1

1

I figured it out. To get an enumerator for a list, you need to get a MethodReference for the GetEnumerator method, like so:

Type listType = typeof (List<>);

MethodReference getEnumerator = moduleDefinition
    .Import(listType.GetMethod("GetEnumerator"));
于 2013-04-10T05:59:33.350 回答