我正在使用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));
我做错了什么?
答案 0 :(得分:1)
我明白了。要获取列表的枚举器,您需要为MethodReference
方法获取GetEnumerator
,如下所示:
Type listType = typeof (List<>);
MethodReference getEnumerator = moduleDefinition
.Import(listType.GetMethod("GetEnumerator"));