除非必要,否則不會擴充套件引數

以下程式:

class Program
{
    static void Method(params Object[] objects)
    {
        System.Console.WriteLine(objects.Length);
    }   
    static void Method(Object a, Object b)
    {
        System.Console.WriteLine("two");
    }
    static void Main(string[] args)
    {
        object[] objectArray = new object[5];

        Method(objectArray);
        Method(objectArray, objectArray);
        Method(objectArray, objectArray, objectArray);
    }
}

將列印:

5
two
3

呼叫表示式 Method(objectArray) 可以用兩種方式解釋:一個 Object 引數恰好是一個陣列(因此程式會輸出 1,因為這將是引數的數量,或者作為引數陣列,以正常形式給出,好像方法 Method 沒有關鍵字 params。在這些情況下,正常的非擴充套件形式總是優先。所以,程式輸出 5

在第二個表示式 Method(objectArray, objectArray) 中,第一種方法的擴充套件形式和傳統的第二種方法都適用。在這種情況下,非擴充套件形式也優先,因此程式列印 two

在第三個表示式 Method(objectArray, objectArray, objectArray) 中,唯一的選擇是使用第一種方法的擴充套件形式,因此程式列印 3