C#如何实现不定参数个数的函数

一般的方法可以自己写多重载的方法来适应不同的参数(一般也是这样做的); 
如果你实在觉得有很多不确定个数的参数可能会用时 
那么你可以用一个数组来存放这些参数(相同数据类型的参数); 
当然如果是不同类型的参数的话,你可以建立一个struct结构的结构数组在存放不同参数, 
当然效率上肯定很有问题.

不过我觉得一般方法有很多参数的话肯定是选择重载的!

C# 允许您在声明某个方法时通过指定 params 关键字来向此方法发送数目不确定的参数。变量列表也可包含常规参数,但请注意:使用 params 关键字声明的参数必须放在最后。它采取长度可变的数组形式,并且每个方法只能有一个 params 参数。

当编译器试图解析某个方法调用时,它会查找参数列表与所调用的方法相匹配的那个方法。如果无法找到与参数 (Argument) 列表相匹配的方法重载,但有一个具有相应类型的 params 参数 (Parameter) 的匹配版本,则将调用此方法,将其他参数 (Argument) 放入一个数组中。

下面的示例说明了这一点:

C#代码

class TestParams
{
    private static void Average(string title, params int[] values)
    {
        int sum = 0;
        System.Console.Write("Average of {0} (", title);

        for (int i = 0; i < values.Length; i++)
        {
            sum += values[i];
            System.Console.Write(values[i] + ", ");
        }
        System.Console.WriteLine("): {0}", (float)sum/values.Length);
    }
    static void Main()
    {
        Average ("List One", 5, 10, 15);
        Average ("List Two", 5, 10, 15, 20, 25, 30);
    }
}

以上示例中,方法 Average 是使用类型为整型数组的 params 参数声明的,这样您便可以用任意数目的变量来调用此方法。输出结果如下:

Average of List One (5, 10, 15, ): 10

Average of List Two (5, 10, 15, 20, 25, 30, ): 17.5

如果要允许使用不确定的不同类型的参数,可以指定 Object 类型的 params 参数。

 

还有其实c中的printf也并是说他可以有多个参数,他只是有个专门的 
存放参数的缓冲区类似我上面说的数组的概念

总结:建议还是选择方法重载吧 


用 params 修饰符声明的参数是参数数组。如果形参表包含一个参数数组,则该参数数组必须位于该列表的最后而且它必须是一维数组类型。例如,类型 string[] 和 string[][] 可用作参数数组的类型,但是类型 string[,] 不能。不可能将 params 修饰符与 ref 和 out 修饰符组合起来使用。

你可能感兴趣的:(C#如何实现不定参数个数的函数)