0
如何使用Mono Cecil生成必要的IL代码以调用System.Collections.Generic.EqualityComparer<T>.get_Default
方法?与Cecil呼叫EqualityComparer.Default
我试过类似的变体,但得到了各种各样的错误,从PEVerify不能解析令牌,超过Cecil抱怨某件事是从另一个模块并需要导入到Cecil本身的ArgumentOutOfRangeException。
泛型类型参数来自我在这里处理的属性的PropertyType
。
PropertyDefinition propertyDef = ...;
var equalityComparer = typeDef.Module.ImportReference(typeof(System.Collections.Generic.EqualityComparer<>));
var equalityComparerInst = equalityComparer.MakeGenericInstanceType(propDef.PropertyType);
var getDefaultMethod = equalityComparerInst.Resolve().Methods.First(m => m.Name == "get_Default");
var getDefaultMethodRef = typeDef.Module.ImportReference(getDefaultMethod, getDefaultMethod);
il.Append(il.Create(OpCodes.Call, getDefaultMethodRef));
我需要什么代码?
来自其他模块的泛型实例总是很棘手。
大,谢谢!我几乎错过了'methodRef.DeclaringType = importedGenericEq;'行,但由于它仍然不适用于我,我终于找到了该行。 – ygoe