除非必要,否则不会扩展参数
以下程序:
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
。