我試圖使用Delegate.CreateDelegate
[MSDN link]綁定到靜態泛型方法,但綁定失敗。 這裏是在PoC代碼:Delegate.CreateDelegate無法綁定到靜態泛型方法
public static class CreateDelegateTest {
public static void Main() {
Action actionMethod = CreateDelegateTest.GetActionDelegate();
Action<int> intActionMethod = CreateDelegateTest.GetActionDelegate<int>();
Func<int> intFunctionMethod = CreateDelegateTest.GetFunctionDelegate<int>();
}
public static Action GetActionDelegate() {
return (Action)Delegate.CreateDelegate(typeof(Action), typeof(CreateDelegateTest), "ActionMethod");
}
public static Action<T> GetActionDelegate<T>() {
return (Action<T>)Delegate.CreateDelegate(typeof(Action<T>), typeof(CreateDelegateTest), "GenericActionMethod");
}
public static Func<TResult> GetFunctionDelegate<TResult>() {
return (Func<TResult>)Delegate.CreateDelegate(typeof(Func<TResult>), typeof(CreateDelegateTest), "GenericFunctionMethod");
}
public static void ActionMethod() { }
public static void GenericActionMethod<T>(T arg) { }
public static TResult GenericFunctionMethod<TResult>() {
return default(TResult);
}
}
的actionMethod
正確創建,但intActionMethod
和intFunctionMethod
創造罰球。
爲什麼CreateDelegate
無法綁定到泛型方法?如何綁定到他們?
我已經提交了Microsoft Connect的錯誤[link]。如果您認爲這是一個錯誤,請投票。
更新2:我錯了,認爲綁定到非函數泛型方法成功。原來,任何泛型方法都無法綁定。
這不是一個錯誤。通常您會依賴編譯器的類型推斷來創建要調用的特定方法的實例,即處理特定類型的方法。 CreateDelegate()不會爲你做這件事,你必須幫助並明確地創建該方法。 MethodInfo.MakeGenericMethod()是必需的。 –
@HansPassant原來我誤解了綁定工作的非函數泛型方法。這實際上發生在所有通用方法上。 –