0

在学习了如何使用Mono.Cecil正确访问 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...)。

4

0 回答 0