2014-05-12 39 views
1

的代表假設我們在一個類型有一個靜態方法「實例」:「SOMETYPE」創建一個不可用的返回類型

MethodInfo instanceMethod = SomeType.GetMethod("Instance");

該方法返回一個類型的對象,是不是可以在我的代碼因爲它沒有引用該類定義的程序集。

我想的話,將其強制轉換爲 「對象」

像這樣:

Delegate.CreateDelegate(typeof(Func<object>), null, "Instance")

不過,我得到這個異常: System.ArgumentException: Error binding to target method.

回答

1

CreateDelegate超載,你appear to be using只適用於實例方法,而不是靜態方法。如果您通過MethodInfo而不是名稱"Instance",那麼您將使用an overload

另外,Func<object>與任何類型都不兼容。您可以創建一個Func<>,該方法的返回類型與MakeGenericType匹配。

Type funcType = typeof(Func<>).MakeGenericType(instanceMethod.ReturnType); 
Delegate del = Delegate.CreateDelegate(funcType, null, instanceMethod); 

順便說一句,我會命名方法GetInstance而不是Instance,讓事情更加清楚。 (如果是財產,Instance將是適當的)

相關問題