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) }
,我就会陷入一个歧义问题。我错过了什么?
泛型类型参数不匹配;CCD_ 3中的特定CCD_ 2是而不是与打开参数TObject
相同。相反,搜索所有Save
方法,然后过滤:
...GetMethods().Single(m => m.Name == strMethod && m.GetParameters().Length == 1)...
我不确定这是否能解决您的问题,但您必须对MyClass的实例调用Invoke(),不确定为什么用null调用它。