2012-01-18 74 views
4

我有以下兩個功能: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

泛型類型參數不匹配;在具體TDoSomething一樣開放參數TObject。相反,搜索所有Save方法,並在那之後進行過濾:

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

Marc,工作很棒!我唯一需要做的就是調用(MyClass,...),而不是.Invoke(null,因爲下面提到的是,我得到了一個非靜態的方法錯誤,否則, – wigs 2012-01-19 17:20:45

1

我不知道這將解決您的問題,但你必須調用invoke()在MyClass的實例,不知道爲什麼你正在用null調用它。

+0

謝謝阿門,我在給你答案的答案以上也是! – wigs 2012-01-19 17:22:03