你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

C#_参数数组

2021/12/30 22:41:47

有时候我们希望参数的数量可变。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string fullName;

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

            Console.WriteLine(fullName);

            fullName = Combine(Environment.SystemDirectory, "Temp", "index.html");

            Console.WriteLine(fullName);

            fullName = Combine(new string[] { "C:\\", "Data", "HomeDir", "index.html" });

            Console.WriteLine(fullName);

            Console.ReadKey();
        }

        static string Combine(params string[] paths)
        {
            string result = string.Empty;
            foreach (string path in paths)
            {
                result = Path.Combine(result, path);
            }
            return result;
        }
    }
}

//D:\C#\ConsoleApp1\ConsoleApp1\bin\Debug\bin\config\index.html
//C:\WINDOWS\system32\Temp\index.html
//C:\Data\HomeDir\index.html

*PathEx.Combine() 完全等价于 Path.Combine() ,只是能处理数量可变的参数,而非只能处理两个。

Combine 方法接受数量可变的参数,要么以逗号分隔的字符串参数,要么是单个字符串数组,前者称为方法调用的 展开(expanded) ,后者称为 正常(normal) 形式。

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

  1. 在方法声明的最后一个参数前添加 params 关键字
  2. 最后一个参数声明为数组

参数数组要注意以下几点:

  • 参数数组不一定是方法的唯一参数,但必须是最后一个。由于只能放在最后,所以最多只能有一个参数数组。
  • 调用者可指定和参数数组对应的零个实参,这会使传递的参数数组包含零个数据项。
  • 参数数组是类型安全的——实参类型必须兼容参数数组的类型。
  • 调用者可传递一个实际的数组,而不是传递以逗号分隔的参数列表。最终生成的CIL代码一样。
  • 如目标方法的实现要求一个最起码的参数数量,请在方法声明中显式指定必须提供的参数。这样一来,遗漏必须的参数会导致编译器报错,而不必依赖运行时错误处理。例如,使用 int Max(int first,params int[] operands) 而不是 int Max(params int[] operands),确保至少有一个整数实参传递给Max。