使用Mono.Cecil维护类型参数的上下文

时间:2013-05-02 03:08:05

标签: c# mono mono.cecil

在学习了如何使用 Mono.Cecil 正确access the fields and properties of a List之后,有人指出您需要确保在List对象上维护类型参数的上下文'正在使用(这是有道理的)。

这样做的正确方法是什么?

编辑(根据@ Simon的要求)

如果列表中有TypeReference,例如

System.Collections.Generic.List`1<MyNamespace.MyObject>

并且您想要访问它的字段,您实际上需要TypeDefinition来获取此列表。当您尝试Resolve TypeReference时,您最终会丢失原始TypeReference(即您的新TypeDefinition现在将用于

System.Collections.Generic.List`1

其中GenericParameterT

我试图通过以下代码重新应用类型参数

var resolve = myList.Resolve();
resolve.GenericParameters.Clear();
foreach (var p in (myList as GenericInstanceType).GenericArguments)
{
    var gp = new GenericParameter(p.FullName, p.GetElementType().Resolve());
    resolve.GenericParameters.Add(gp);
}

这不起作用,导致

Member 'MyNamespace.MyObject' is declared in another module and needs to be 
imported

错误。 (如果您没有尝试以这种方式重新填充,则错误将改为Member 'T' is declared...)。

0 个答案:

没有答案