我有以下两个功能:
public class MyClass
{
public void Save<TObject>(TObject object) where TObject : class
{
}
public void Save<TObject>(TObject object, String strValue) where TObject : class
{
}
}
我希望能够动态调用第一个保存功能,类似于以下内容:
public void DoSomething<T>(String strMethod) where T : class
{
T myObject = Activator.CreateInstance<T>();
MyClass.GetType().GetMethod(strMethod, new Type[] { typeof(T) }).MakeGenericMethod(typeof(T)).Invoke(null, new[] { myObject });
}
不幸的是,当我这样做时,它无法匹配第一个保存功能。如果我删除new Type[] { typeof(T) }
,我会遇到歧义问题。我错过了什么?
答案 0 :(得分:2)
泛型类型参数不匹配;您T
中的特定 DoSomething
与开放参数 TObject
相同。而是搜索所有Save
方法,然后在此之后进行过滤:
...GetMethods().Single(m => m.Name == strMethod && m.GetParameters().Length == 1)...
答案 1 :(得分:1)
我不确定这会解决您的问题,但您必须在MyClass的实例上调用Invoke(),不知道为什么要用null调用它。