筆記:如何使用 Reflection 呼叫參數中帶有 params 類型不定個數參數的方法。
今天在寫程式,要做動態呼叫帶有 params 的參數的方法時,我撰寫了下列的程式:
public class Program3
{
static void Main(params string[] args)
{
try
{
MyClass cls = new MyClass();
MethodInfo methodAddInfo = cls.GetType().GetMethod("Add");
Console.WriteLine("Add(x, y) : {0}",
methodAddInfo.Invoke(cls, new object[] { 5, 2 }));
methodAddInfo = cls.GetType().GetMethod("AddNumberList");
Console.WriteLine("AddNumberList(num_list) : {0}",
methodAddInfo.Invoke(cls, new object[] { 1, 2, 3, 4, 5, 6, 7, 8 }));
cls = null;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
}
Console.ReadLine();
}
}
public class MyClass
{
public int Add(int X, int Y)
{
return X + Y;
}
// 有帶 params 不定個數參數的函式
public int AddNumberList(params int[] NumberList)
{
int sum = 0;
foreach (int num in NumberList)
sum += num;
return sum;
}
}
但是卻出現了下列的訊息:
錯誤發生在帶有 params 參數的那一個方法,我試想可能 Reflection 將 params 型的參數設定為單一個參數類型,因此我把傳入的參數重新整理成:
Console.WriteLine("AddNumberList(num_list) : {0}",
methodAddInfo.Invoke(cls, new object[] { new int[] { 1, 2, 3, 4, 5, 6, 7, 8 } }));
再重跑後,即可成功。