泛型方法定义如下:
private static T GetComparisonObject<T>(ComparisonAttribute attribute, object objectToParse)
{
// Perform a some action
return (T)resultObject;
}
调用方法如下:
var srcObjectToCompare = GetComparisonObject<DynamicType>(attributeToCompare, srcObject);
需要调用该方法的类型在配置文件中配置为:
<add attributename ="Count" attributetype ="MemberInformation" attributeparam ="Count" type="System.Int32" comparertype="ditCreditEMGTestAutomationDifferenceEngine.Comparers.TypeComparer, ditCreditEMGTestAutomationDifferenceEngine.dll" />
在&lt;&gt;中传递的令牌对于泛型方法,必须是调用该方法的类型。从XML中的类型键配置,可以创建重新类型化的类型实例{即。 Type.GetType(“System.Int32”)},但是如何生成类型定义,然后可以将其传递给Generic方法?
希望我不会错过这里的小学! :-O
提前致谢。
答案 0 :(得分:3)
使用反射调用泛型方法
MethodInfo method = typeof(YourClass).GetMethod("GetComparisonObject");
MethodInfo generic = method.MakeGenericMethod(GenericArgumentType);
Object retVal = generic.Invoke(this, new object[] { attribute, parseObject });
答案 1 :(得分:1)
你必须使用反射:
Type runtimeType = //get the type
MethodInfo method = typeof(MyClass).GetMethod("GetComparisonObject").MakeGenericMethod(runtimeType);
object returnValue = method.Invoke(null, new object[] { attribute, parseObject });
但是,重要的是要注意这种方法会抛弃泛型的全部价值。正如您在上面看到的,方法调用的结果是object
,由于我们在编译时不知道类型,因此我们无法进行任何类型检查。如果在编译时不知道类型,那么使用泛型方法就没有意义了。