假設我有一個這樣的類,包含一個通用的方法,用out參數:如何通過反射調用帶參數的泛型方法?
public class C
{
public static void M<T>(IEnumerable<T> sequence, out T result)
{
Console.WriteLine("Test");
result = default(T);
}
}
從閱讀的答案一對夫婦的其他問題(How to use reflection to call generic Method?和Reflection on a static overloaded method using an out parameter),我想我可能能夠調用該方法通過反射如下:
// get the method
var types = new[] { typeof(IEnumerable<int>), typeof(int).MakeByRefType() };
MethodInfo mi = typeof(C).GetMethod(
"M", BindingFlags.Static, Type.DefaultBinder, types, null);
// convert it to a generic method
MethodInfo generic = mi.MakeGenericMethod(new[] { typeof(int) });
// call it
var parameters = new object[] { new[] { 1 }, null };
generic.Invoke(null, parameters);
但是mi
是回來空。我試過在types
數組中使用object
而不是int
,但這也不起作用。
如何指定之前調用MakeGenericMethod
的通用方法的類型(需要輸出參數)?
您的真實班級是否有'M'超載?如果沒有,你可以使用'GetMethod'變體,你不需要指定參數類型。這並不回答你問的問題。 – hvd
在這種特定情況下,我可以通過不指定任何類型並僅使用名稱來解決該問題,如@SLaks所示。我仍然很想知道指定模板類型數組的語法是什麼,或者它不可能。 –
我出錯的地方是我認爲有必要傳遞類型數組以便使用'out'或'ref'參數。情況並非如此......只要您通過某種方式獲得了正確的'MethodInfo',就可以將它傳遞給參數數組,並且它將設置值。 –