形参数组:方法声明时,使用params(parameters的缩写)修饰符声明的形参,被称为形参数组。
- 该形参数组必须位于方法参数列表的最后
- params后面必须跟的是一个数组(不要使矩阵数组,如:string[,])
- 不要把params和ref和out组合起来使用
- 在调用形参数组所在的方法时,有两种调用方式:
- 实参 可以是一个与形参数据类型一致的数组
- 可以提供 零个或多个实参,方法调用时会自动根据传入的实参 创建一个形参类型的数组
Console类的WriteLine()方法提供的一种重载方式,就是带有形参数组的。
下面展示如何调用这个WriteLine方法
//WiteLine第二个参数是形参数组,所以我们传入一个string[]数组 来调用Writeline方法
Console.WriteLine("我叫{0},我{1}岁了",new string[]{ "bigboss", "26"});//我叫bigboss,我26岁了
以string的Split()方法为例,展示调用形参数组所在的方法时,可以传入多个实参。
string str = "a,b,c.1.2.4;99;er;ww";
var _params = new char[] {'.',';',',' };
//实参为一维数组
var result_arr= str.Split(_params);
//返回长度为9的数组 {"a","b","c","1","2","4","99","er","ww"}
foreach (var item in result_arr)
{
Console.WriteLine(item);
}
//零个实参
var result_arr_2 = str.Split();
//无匹配结果 返回一个长度为1的数组 {"a,b,c.1.2.4;99;er;ww"}
foreach (var item in result_arr_2)
{
Console.WriteLine(item);
}
//一个实参
var result_arr_4 = str.Split('.');
//匹配到字符'.';返回长度为4的数组{"a,b,c","1","2","4;99;er;ww"}
foreach (var item in result_arr_4)
{
Console.WriteLine(item);
}
//多个实参
var result_arr_3 = str.Split(',','.',';');
//返回长度为9的数组 {"a","b","c","1","2","4","99","er","ww"}
foreach (var item in result_arr_3)
{
Console.WriteLine(item);
}
可以看出,含有形参数组的方法调用是十分灵活的--传入实参灵活
声明带形参数组的方法
//错误的方法声明:params 参数必须是形参列表中最后一个参数
static void ErrorMethod(params string[] lists, string name)
{
foreach (var item in lists)
{
Console.WriteLine(item);
}
}
//错误的方法声明:params 参数必须是一维数组
static void ErrorMethod2(params string[,] lists)
{
foreach (var item in lists)
{
Console.WriteLine(item);
}
}
//正确的声明形式
static void TrueMethod(string name, params string[] lists)
{
foreach (var item in lists)
{
Console.WriteLine(item);
}
}
说明:因为在我们调用除带有形参数组外,还有其它形参的方法时,由于形参数组的独特性:可以传多个实参;所以如果形参数组声明在方法形参列表的前面(不是最后一个),方法调用时C#解析器不知道什么哪一个实参才是针对形参数组的结束位置;为了避免这种问题,在编译阶段就不允许形参数组不出现在方法最后的形式。
以上是对形参数组的总结,形参数组我们大多数情况下是调用,而不自己声明;注意调用时方法的重载形式就好;记录下来,以便以后查阅。