.net Mono.Cecil导入列表枚举器
我正在使用Mono.Cecil进行一些IL编织,我遇到了这个问题:.net Mono.Cecil导入列表枚举器,.net,mono,mono.cecil,.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),我用它来获取枚举数,如下所示: var instanceType = (ty
Member 'System.Collections.Generic.List`1/Enumerator' is declared in
another module and needs to be imported
如何导入具有列表枚举器的模块
我有一个TypeReference
(System.Collections.Generic.List`1var instanceType = (typeReference as GenericInstanceType);
var list = instanceType.Resolve();
MethodDefinition getEnumerator;
if (!list.TryGetMethod("GetEnumerator", out getEnumerator))
throw ...
instructions.Add(Instruction.Create(OpCodes.Callvirt, getEnumerator));
Type listType = typeof (List<>);
MethodReference getEnumerator = moduleDefinition
.Import(listType.GetMethod("GetEnumerator"));
。。。其中,TryGetMethod
是一个自定义扩展,用于搜索相关类型中具有该名称的方法
然后我在代码中进一步使用getEnumerator,如下所示:
var instanceType = (typeReference as GenericInstanceType);
var list = instanceType.Resolve();
MethodDefinition getEnumerator;
if (!list.TryGetMethod("GetEnumerator", out getEnumerator))
throw ...
instructions.Add(Instruction.Create(OpCodes.Callvirt, getEnumerator));
Type listType = typeof (List<>);
MethodReference getEnumerator = moduleDefinition
.Import(listType.GetMethod("GetEnumerator"));
我做错了什么?我知道了。要获取列表的枚举数,需要为
GetEnumerator
方法获取MethodReference
,如下所示:
var instanceType = (typeReference as GenericInstanceType);
var list = instanceType.Resolve();
MethodDefinition getEnumerator;
if (!list.TryGetMethod("GetEnumerator", out getEnumerator))
throw ...
instructions.Add(Instruction.Create(OpCodes.Callvirt, getEnumerator));
Type listType = typeof (List<>);
MethodReference getEnumerator = moduleDefinition
.Import(listType.GetMethod("GetEnumerator"));
Type listType=typeof(列表);
MethodReference getEnumerator=moduleDefinition
.Import(listType.GetMethod(“GetEnumerator”);
我想出来了。要获取列表的枚举数,需要为GetEnumerator
方法获取MethodReference
,如下所示:
var instanceType = (typeReference as GenericInstanceType);
var list = instanceType.Resolve();
MethodDefinition getEnumerator;
if (!list.TryGetMethod("GetEnumerator", out getEnumerator))
throw ...
instructions.Add(Instruction.Create(OpCodes.Callvirt, getEnumerator));
Type listType = typeof (List<>);
MethodReference getEnumerator = moduleDefinition
.Import(listType.GetMethod("GetEnumerator"));
Type listType=typeof(列表);
MethodReference getEnumerator=moduleDefinition
.Import(listType.GetMethod(“GetEnumerator”);