अपने पिछले पोस्ट में आप संकेत मिलता है कि आप की तरह कोड का उपयोग कर रहे:
TypeDefinition type = ...;
TypeDefintion baseType = type.BaseType.Resolve();
MethodDefinition baseMethod = baseType.Methods.First (m => ...);
MethodReference baseMethodReference = type.Module.Import (baseMethod);
il.Emit (OpCodes.Call, baseMethodReference);
जाहिर है, इस जेनरिक लिए उपयुक्त नहीं है:
जब आप Resolve()
.BaseType, तो आप खो रहे हैं सामान्य तत्काल जानकारी। आपको बेस टाइप से उचित जेनेरिक जानकारी के साथ उपयुक्त विधि कॉल को फिर से बनाना होगा। , आप के रूप में अपने कोड को फिर से लिखने कर सकते हैं
public static TypeReference MakeGenericType (this TypeReference self, params TypeReference [] arguments)
{
if (self.GenericParameters.Count != arguments.Length)
throw new ArgumentException();
var instance = new GenericInstanceType (self);
foreach (var argument in arguments)
instance.GenericArguments.Add (argument);
return instance;
}
public static MethodReference MakeGeneric (this MethodReference self, params TypeReference [] arguments)
{
var reference = new MethodReference(self.Name,self.ReturnType) {
DeclaringType = self.DeclaringType.MakeGenericType (arguments),
HasThis = self.HasThis,
ExplicitThis = self.ExplicitThis,
CallingConvention = self.CallingConvention,
};
foreach (var parameter in self.Parameters)
reference.Parameters.Add (new ParameterDefinition (parameter.ParameterType));
foreach (var generic_parameter in self.GenericParameters)
reference.GenericParameters.Add (new GenericParameter (generic_parameter.Name, reference));
return reference;
}
उन के साथ
:,
TypeDefinition type = ...;
TypeDefintion baseTypeDefinition = type.BaseType.Resolve();
MethodDefinition baseMethodDefinition = baseTypeDefinition.Methods.First (m => ...);
MethodReference baseMethodReference = type.Module.Import (baseMethodDefinition);
if (type.BaseType.IsGenericInstance) {
var baseTypeInstance = (GenericInstanceType) type.BaseType;
baseMethodReference = baseMethodReference.MakeGeneric (baseTypeInstance.GenericArguments.ToArray());
}
il.Emit (OpCodes.Call, baseMethodReference);
स्रोत
2011-02-15 09:23:17
इस बल्कि महत्वपूर्ण हो रही है
चीजों को आसान बनाने के लिए, के लिए निम्न विधियों, सेसिल टेस्ट स्वीट से लिया का उपयोग करते हैं कृपया सहायता कीजिए!!! – TDaver