C#:方法参数之--形参数组(params)

形参数组:方法声明时,使用params(parameters的缩写)修饰符声明的形参,被称为形参数组。

  • 该形参数组必须位于方法参数列表的最后
  • params后面必须跟的是一个数组(不要使矩阵数组,如:string[,])
  • 不要把params和ref和out组合起来使用
  • 在调用形参数组所在的方法时,有两种调用方式:
    • 实参 可以是一个与形参数据类型一致的数组
    • 可以提供 零个或多个实参,方法调用时会自动根据传入的实参 创建一个形参类型的数组

Console类的WriteLine()方法提供的一种重载方式,就是带有形参数组的。

带有形参数组的Writeline方法
下面展示如何调用这个WriteLine方法

//WiteLine第二个参数是形参数组,所以我们传入一个string[]数组 来调用Writeline方法
Console.WriteLine("我叫{0},我{1}岁了",new string[]{ "bigboss", "26"});//我叫bigboss,我26岁了

以string的Split()方法为例,展示调用形参数组所在的方法时,可以传入多个实参。

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#解析器不知道什么哪一个实参才是针对形参数组的结束位置;为了避免这种问题,在编译阶段就不允许形参数组不出现在方法最后的形式。
以上是对形参数组的总结,形参数组我们大多数情况下是调用,而不自己声明;注意调用时方法的重载形式就好;记录下来,以便以后查阅。

posted @ 2020-09-29 11:02  BigBosscyb  阅读(2071)  评论(0编辑  收藏  举报