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

本文关键字:动态 方法 调用 函数 泛型 | 更新日期: 2023-09-27 18:20:38

我有以下两个函数:

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) },我就会陷入一个歧义问题。我错过了什么?

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

泛型类型参数不匹配;CCD_ 3中的特定CCD_ 2是而不是打开参数TObject相同。相反,搜索所有Save方法,然后过滤:

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

我不确定这是否能解决您的问题,但您必须对MyClass的实例调用Invoke(),不确定为什么用null调用它。