使用params关键字重载方法

class D { public void foo(int z, int x) { Console.WriteLine("foo with two parameters"); } public void foo(params int[] z) { Console.WriteLine("foo with two params parameter"); } } class Program { public static void Main() { D obj = new D(); obj.foo(10,20); } } 

当我运行此代码时,执行方法foo(int x, int y)而不是foo(params int[] z) 。 为什么是这样?

C#编译器将始终尝试选择与参数最匹配的metod。 在你的情况下, foo(int, int)重载完全匹配你的输入参数,而foo(params int)重载是一个较弱的匹配。

如果您有兴趣,可以在C#中很好地概述方法重载: http : //csharpindepth.com/Articles/General/Overloading.aspx

因为在您的情况下,存在完全匹配的重载。