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

4
我有以下两个函数:
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个回答

2

泛型类型参数不匹配;你在DoSomething中的具体TTObject开放参数TObject不同。相反,先搜索所有的Save方法,然后再进行过滤:

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

Marc,太好了!我只需要做一个改动就可以了——使用.Invoke(MyClass, ...而不是下面arem提到的null。否则我会得到一个非静态方法错误。 - wigs

1

我不确定这会解决你的问题,但你必须在 MyClass 的实例上调用 Invoke(),不确定为什么你要使用 null 进行调用。


谢谢Armen,我在上面的回答中也给了你Kudos! - wigs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接