C#动态方法调用泛型函数

时间:2012-01-18 23:45:34

标签: c#

我有以下两个功能:

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) },我会遇到歧义问题。我错过了什么?

2 个答案:

答案 0 :(得分:2)

泛型类型参数不匹配;您T中的特定 DoSomething 开放参数 TObject相同。而是搜索所有Save方法,然后在此之后进行过滤:

...GetMethods().Single(m => m.Name == strMethod && m.GetParameters().Length == 1)...

答案 1 :(得分:1)

我不确定这会解决您的问题,但您必须在MyClass的实例上调用Invoke(),不知道为什么要用null调用它。