• C# Params的应用


    为了将方法声明为可以接受可变数量参数的方法,我们可以使用params关键字来声明数组,如下所示:

    public static Int32Add(params Int32[] values)

    {

         Int32 sum = 0;

         for (Int32 x = 0; x < values.Length; x++)

         {

         sum += values[x];

         }

         return sum;

    }

         只有方法的最后一个参数才可以标记params,该参数必须标识一个一维数组,但类型不限。对方法的最后一个参数传递null或者0个数目的数组的引用都是合法的,如下面代码调用上面Add方法,编译正常,运行正常,和期望一样结果为0:

    public static void Main()

    {

         Console.WriteLine(Add());

    }

         下面看一下如何编写一个可以接受任意数量、任意类型的参数的方法,也就是把上面方法的Int32改成Object[]就可以了:

    public static void Main()

    {

         DisplayTypes(new Object(), new Random(), "string", 10);

    }

    public static void DisplayTypes(params Object[] objects)

    {

         foreach(Object o in objects)

         {

              Console.WriteLine(o.GetType());  

         }

    }

    输出:

    System.Object

    System.Random

    System.String

    System.Int32

     

    注意,对于可接受可变数量参数的方法的调用会对性能造成一定的损失,因为数组是在堆上分配的,数组的元素还得初始化,数组的内存还得被垃圾回收器回收,为了减少这种没必要的性能损失,我们希望定义几个没有params关键字的重载方法,如System.String类的Concat方法,如下:

    public static string Concat(object arg0);

    public static string Concat(params object[] args);

    public static string Concat(params string[] values);

    public static string Concat(object arg0, object arg1);

    public static string Concat(string str0, string str1);

    public static string Concat(object arg0, object arg1, object arg2);

    public static string Concat(string str0, string str1, string str2);

    public static string Concat(object arg0, object arg1, object arg2, object arg3);

    public static string Concat(string str0, string str1, string str2, string str3);

  • 相关阅读:
    源码分析— java读写锁ReentrantReadWriteLock
    7. SOFAJRaft源码分析—如何实现一个轻量级的对象池?
    深入理解Kafka必知必会(2)
    6. SOFAJRaft源码分析— 透过RheaKV看线性一致性读
    5. SOFAJRaft源码分析— RheaKV中如何存放数据?
    深入理解Kafka必知必会(1)
    4. SOFAJRaft源码分析— RheaKV初始化做了什么?
    3. SOFAJRaft源码分析— 是如何进行选举的?
    2. SOFAJRaft源码分析—JRaft的定时任务调度器是怎么做的?
    pinpoint1.8.5安装及使用指南
  • 原文地址:https://www.cnblogs.com/kangxia/p/4143376.html
Copyright © 2020-2023  润新知