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