什么是可变参数数组啊?可变参数数组必须是最后一个吗?不太理解!

解决方案 »

  1.   

    params 关键字可以指定采用数目可变的参数的 方法参数。 可以发送参数声明中所指定类型的逗号分隔的参数列表或指定类型的参数数组。还可以不发送参数。在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。 示例下面的示例演示可向 params 参数发送参数的各种方法。 public class MyClass
    {
        public static void UseParams(params int[] list)
        {
            for (int i = 0; i < list.Length; i++)
            {
                Console.Write(list[i] + " ");
            }
            Console.WriteLine();
        }    public static void UseParams2(params object[] list)
        {
            for (int i = 0; i < list.Length; i++)
            {
                Console.Write(list[i] + " ");
            }
            Console.WriteLine();
        }    static void Main()
        {
            // You can send a comma-separated list of arguments of the 
            // specified type.
            UseParams(1, 2, 3, 4);
            UseParams2(1, 'a', "test");        // A params parameter accepts zero or more arguments.
            // The following calling statement displays only a blank line.
            UseParams2();        // An array argument can be passed, as long as the array
            // type matches the parameter type of the method being called.
            int[] myIntArray = { 5, 6, 7, 8, 9 };
            UseParams(myIntArray);        object[] myObjArray = { 2, 'b', "test", "again" };
            UseParams2(myObjArray);        // The following call causes a compiler error because the object
            // array cannot be converted into an integer array.
            //UseParams(myObjArray);        // The following call does not cause an error, but the entire 
            // integer array becomes the first element of the params array.
            UseParams2(myIntArray);
        }
    }
    /*
    Output:
        1 2 3 4
        1 a test    5 6 7 8 9
        2 b test again
        System.Int32[]
    */
    public class MyClass
    {
        public static void UseParams(params int[] list)
        {
            for (int i = 0; i < list.Length; i++)
            {
                Console.Write(list[i] + " ");
            }
            Console.WriteLine();
        }    public static void UseParams2(params object[] list)
        {
            for (int i = 0; i < list.Length; i++)
            {
                Console.Write(list[i] + " ");
            }
            Console.WriteLine();
        }    static void Main()
        {
            // You can send a comma-separated list of arguments of the 
            // specified type.
            UseParams(1, 2, 3, 4);
            UseParams2(1, 'a', "test");        // A params parameter accepts zero or more arguments.
            // The following calling statement displays only a blank line.
            UseParams2();        // An array argument can be passed, as long as the array
            // type matches the parameter type of the method being called.
            int[] myIntArray = { 5, 6, 7, 8, 9 };
            UseParams(myIntArray);        object[] myObjArray = { 2, 'b', "test", "again" };
            UseParams2(myObjArray);        // The following call causes a compiler error because the object
            // array cannot be converted into an integer array.
            //UseParams(myObjArray);        // The following call does not cause an error, but the entire 
            // integer array becomes the first element of the params array.
            UseParams2(myIntArray);
        }
    }
    /*
    Output:
        1 2 3 4
        1 a test    5 6 7 8 9
        2 b test again
        System.Int32[]
    */
      

  2.   

    一般来说参数个数都是固定的,定义为集群类型的参数可以实现可变数目参数的目的,但是.NET提供了更灵活的机制来实现可变数目参数,这就是使用param修饰符。可变数目参数的好处就是在某些情况下可以方便的提供对于参数个数不确定情况的实现,例如计算任意数字的加权和,连接任意字符串为一个字符串等。实质上是这样子:    static void ShowAgeSum(string team, [ParamArrayAttribute] int[] ages){...}    1.param修饰的参数必须为一维数组,事实上通常就是以群集方式来实现多个或者任意多个参数的控制的,所以数组是最简单的选择;
        2.param修饰的参数数组,可是是任何类型。因此,如果需要接受任何类型的参数时,只要设置数组类型为object即可;
        3.param必须在参数列表的最后一个,并且只能使用一次。例子请看http://www.cnblogs.com/nintenyun/articles/1954327.html