一般的方法可以自己写多重载的方法来适应不同的参数(一般也是这样做的);
如果你实在觉得有很多不确定个数的参数可能会用时
那么你可以用一个数组来存放这些参数(相同数据类型的参数);
当然如果是不同类型的参数的话,你可以建立一个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 修饰符组合起来使用。