筆記:如何使用 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 } }));
再重跑後,即可成功。

