C# params关键字的使用

params表示参数是可变个数的,示例如下。

在不加params修饰时,只能往里传入一个数组。调用方式1

在加了params后,不仅可以传入数组,还可以传入多个参数,这多个参数等价为数组。如调用方式2

 static void Main(string[] args)
        {
            int[] array = new int[] { 4, 2, 3, 4, 5, 5 };
            int min = Util.Min(array);//调用方式1
            Console.WriteLine(min);
             min = Util.Min(6, 3, 4, 5);//调用方式2
            Console.WriteLine(min);
        }


 class Util
    {
        public static int Min(params int []par)
        {
            if (par == null || par.Length == 0)
            {
                throw new ArgumentException("Util.Min:Not enough arguments");
            }
            int min = par[0];
            foreach (int i in par)
            {
                if (i < min)
                    min = i;
            }
            return min            
        }
    }

注意事项:

要点1:

1params不能用在多维数组上,这个大家可以试试,肯定会报错的。错误提示参数数组必须为一维数组

2.不能使用params来重载方法

public static int Min(params int []par)

public static int Min(int []par)

这种方式是不对的,因为重载是通过参数个数不同或者相同位置参数类型不同来区分的,这两种函数,函数的参数个数和参数类型都相同,所以不能区分。

3.不允许ref和out  与 params同时使用,加上之后程序编译时报错。因为数组的传递的本来就是引用(只限于用数组的方式进行调用),用上面调用方式2则无法对实参进行更改。用调用方式1时,在函数内部对参数数组的值进行了更改,则作为实参的数组的值也被更改。

要点2:

1.params数组必须是最后一个参数。

public static int Min( int a, params int []par)

2.一个没有params的方法的优先级高于带有params的方法

 public static int Min(int a,int b);//函数1

 public static int Min(params int []par);//函数2

 int min = Util.Min(9,2);//函数1优先级高,调用函数1,如果给a和b初始化值,则

int min = Util.Min(1, 2, 3);//函数要放两个参数,所以调用函数2

int min = Util.Min(1 );//函数要放两个参数,所以调用函数2

如果将函数1的参数进行了初始化,则

int min = Util.Min(1 );//函数1最多放2个参数,所以优先调用函数1


书上还有一条,是对于引起歧义的方法,重载编译器报错,就像下面两个一样,说优先级是一样的,所以编译器无法判断调用什么。

 public static int Min(int a, params int[] par);//函数1

   public static int Min(params int []par);//函数2

但是我在运行之后发现

 int min = Util.Min(array);//这种情况调用函数2

   int min = Util.Min();//参数为空调用函数2

  int min = Util.Min(2,array);//调用函数1

 int min = Util.Min(2);//调用函数1,只有一个参数,应该是,2为int,把空给那个params数组。就像参数为空时可以调用函数2 那样

int min = Util.Min(2,3);//多个参数,也是调用函数1


使用params数组:

  public static void Min(params object[] par);

             int[] array = new int[] { 4, 2, 3, 4, 5, 5 };
            int a = 8;
            object[] o = new object[] { "abc", 4.5 };
            Util.Fun(a,"agga",425,5.67,array,o);//可以传递任意类型的参数,此时数组o传递到函数内,被一个引用指向o,输出的是这个对象的名字
            Util.Fun(o);//可以传递object数组,此时o在函数内被引用数组指向,输出的是内容
           Util.Fun();//可以什么都不传递,此时什么都没有,什么都不输出
           Util.Fun(null);//也可以传递空值





  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值