您的位置:首页 > 编程语言 > C#

c#基础之长度可变类型相同的参数列表

2015-08-19 16:18 281 查看
为了简化编码,c#提供了一个特殊的关键字params,允许在调用方法时提供数量可变的实参,而不是由方法实现固定好的形参数量。先看代码吧。

using System;
using System.Linq;
using System.IO;
class HelloWorld {

    static void Main() {
        string fullName;

        fullName = Combine(Directory.GetCurrentDirectory(), "bin", "config", "index.html");
        Console.WriteLine(fullName);

        fullName = Combine(Environment.SystemDirectory, "bin", "xindex.html");
        Console.WriteLine(fullName);

        fullName = Combine(new string[] { "C:", "data", "index.html" });
        Console.WriteLine(fullName);
        Console.ReadLine();
    }
    public static string Combine(params string[]paths){
        string result=string.Empty;
        foreach (string path in paths) {
            result = System.IO.Path.Combine(result, path);
        }
        return result;
    }
}


第一个Combine()调用了四个参数。第二个调用了3个参数,最后一个调用中,参数用一个数组来代替。换言之,Combine()方法接受数量可变的参数,这些参数要么是以逗号隔开,要么是单个字符串数组,前者的语法成为方法调用的”展开形式“,后者称为正常形式。

为了获得这样的效果 Combine()方法需要:

(1) 在方法的最后一个参数之前添加params关键字。

(2)将最后一个参数声明为数组。

调用System.IO.Path.Combie()方法,该方法能自动合并路径中的不同部分,并能正确使用平台的特有的目录分隔符,注意Combine()完全等价于这个方法,处理参数数量可变的参数。而不是只能处理两个。

可变参数要注意下面这些地方:

~参数数组不一定是方法的唯一参数,但必须是方法声明的最后一个参数。由于只有最后一个参数才可能是参数数组,所以方法最多只有一个参数数组。

~调用者可以指定和参数对应的零个实参,这会造成传递的参数数组包含零个数据项。

~参数数组是类型安全的,实参的类型必须兼容于参数数组元素的类型。

~调用者可以显示的使用数组,而不是以逗号分隔的参数列表,最终生成的CIL代码是一样的。

~假如目标的实现要求一个最起码的参数数量,请在方法声明中显示指定必须提供的参数。这样如果遗漏要求的参数,会导致编译器报错,而不需要依赖运行时错误处理,例:

如果一个方法要求一个或多个整型实参,那就应该使用int Max(int first,params int[] operands)来声明这个方法,而不是使用int Max(params int[] operands)来声明,这样确保至少有一个整数实参传给Max();

使用参数数组,可以将类型相同类型的,数量可变的多个参数传给方法。 在后面会讨论如何支持不同类型的,数量可变的参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: