C# 用params定义一维参数数组

参数数组,通过关键字params定义参数数组,params类型参数主要用于在对数组长度未知(可变)的情况下进行函数声明,调用时可以传入个数不同的实参,具备很好的灵活性。

首先给出一个具体的例子介绍参数数组(params)的具体用法:

例①:

static void Main(string[] args)
{
    T(‘s‘, ‘a‘, ‘g‘, ‘e‘, ‘w‘, ‘q‘);  //错误提示:T方法没有采用6个参数的重载
    T(new object[] { ‘a‘, ‘g‘ ,1,"小龙女"});
}
            
public static void T(object[] c)
{
    for (int i = 0; i < c.Length; i++)
    {
        Console.Write(c[i] + " ");
    }
}

例②:

static void Main(string[] args)
{
    T(‘s‘, ‘a‘, ‘g‘, ‘e‘, ‘w‘, ‘q‘);  //错误提示:T方法没有采用6个参数的重载
    T(new object[] { ‘a‘, ‘g‘ ,1,"小龙女"});
}
            
public static void T(params object[] c)
{
    for (int i = 0; i < c.Length; i++)
    {
        Console.Write(c[i] + " ");
    }
}

例①、例②对比就会发现,参数数组前不加params的话就只能传进去一个数组;加了params之后,可以传进数组或者传进多个参数。

下面总结一些使用参数数组的注意事项:

1. 只能在一维数组上使用params关键字。

2. 不能重载一个只基于params关键字的方法。params关键字不构成方法的签名的一部分。

例③:

class Program
{
    public static void Min(int[] list)
    {
    }
        
    public static void Min( params int[] list) //编译时错误提示:类型Program已经定义了一个名为Min的具有相同参数类型的成员
    {
    }
}

例③验证了2.

3. 不允许ref或out params数组。

例④:

 public static void Min(out params int[] list) //编译时错误提示:该参数上修饰符太多        
 {
           
 }
 
 public static void Max(ref params int[] list) //编译时错误提示:该参数上修饰符太多        
 {
 
 }

4. params 数组必须是方法的最后一个参数(也就是只能有一个params数组参数)。

例⑤:

 public static void Min( params int[] A,int[] B,int[] C)//错误提示:params参数必须是形参表中的最后一个参数
 {
           
 }
 
 public static void Max(int[] A,int[] B,params int[] C)
 {
 
 }

5. 编译器会检查并拒绝任何可能有歧义的重载。

6. 非params方法总是优先于一个params方法。也就是说,如果愿意,仍然可以为普通情况创建一个方法  的重载版本。

例⑥:

public static void Min(int A,int B)
{
           
}
 
public static void Min(params int[] C)
{
 
}

第一个先被调用(声明不带params数组参数的方法,或许是一种有用的优化技术,可以避免编译器创建和填充太多的数组)。

7. Black.Hole(黑洞),params object[] list。

例⑦:

public static void Hole(params object[] C)
{
 
}

System.Object(object)是所有类的根,使用params object数组作为形参表中的参数来声明一个方法,它能接受任意数量的object参数;换言之,不仅参数的数量是任意的,参数的类型也可以是任意的。所以,此方法称为Black.Hole(黑洞)

①. 可以不向它传递任何参数;

②. 可以在调用它时,传递null作为参数;

③. 可以向它传递一个实际的数组。也就是说,可以人工创建本由编译器来创建的数组;

④. 可以向它传递不同类型的其他任何参数,这些参数将自动封装到一个object数组。

时间: 2024-10-13 03:06:07

C# 用params定义一维参数数组的相关文章

out参数,ref参数,params参数数组

params参数数组 params关键字可以为方法指定数目可变的参数.params关键字修饰的参数,可以传入任意数目的同类型参数,甚至可以不传入参数. 不过params修饰的参数必须是方法的最后一个参数,并且一个方法只能有一个params修饰的参数. 示例 public class MyClass { public static void UseParams(params int[] list) { for (int i = 0; i < list.Length; i++) { Console.

参数数组(params)的用法

使用参数数组的注意事项: 1. 只能在一维数组上使用params关键字. 2. 不能重载一个只基于params关键字的方法.params关键字不构成方法的签名的一部分. 如: //编译时错误:重复访问 public static int Min(int [] paramList) ............. public static int Min(params int [] paramList) ............. 3. 不允许ref或out params数组 //编译时错误 pub

Android 在资源文件(res/strings.xml)定义一维数组,间接定义二维数组

经常我们会在资源文件(res/strings.xml)定义字符串,一维数组,那定义二维数组?直接定义二维数组没找到,可以间接定义. 其实很简单,看过用过一次就可以记住了,一维数组估计大家经常用到,但是二维数组应该比较少用,因为只能间接定义二维数组. 数组的定义: 数组就是一次性定义相同数据类型的一组变量数组定义. 数组的特点: 1.数组是相同数据类型的元素的集合. 2.数组中的各元素是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起. 3.数组元素用整个数组的名字和它自己在数组中的顺序位

javascript 函数的定义与参数的有无

一.函数定义 function fName(params){ statements; return somevalue;//可以省略 } 注意事项: 1.参数可有,可无.不定义参数,在调用参数时,也可以传入参数: 例如: 1 function add(){ 2 if(arguments.length==1){ 3 alert(arguments[0]); 4 }else if(arguments.length==2){ 5 alert(arguments[0] + arguments[1] );

参数数组

          参数数组 定义一个函数,用采取得的数字的和,但是数字的个数不确定. 解决方案: 可以使用一个参数数组来进行求解: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 参数数组 8 { 9 //求一串数字的和 10 11 class Program 12

二维数据和一维指针数组

1.二维数组名a的含义: 定义一个二维数组a : int a[3][4] = {{1,3,5,7}, {9,11,13,15}, {17,19,21,23}}; a数组包含3个行元素,a[0],a[1],a[2]. 每个行元素a[i] 又是一个一维数组,它包含4个元素. a == &a[0] a + i == &a[i] a[0] == &a[0][0] a[i] == &a[ i ][0] 2.二维数组地址的关系:(地址由行至列以元素类型递增) 3.二维数组与一维指针数组

c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)

 一.方法参数的类型----值类型和引用类型 当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置.所以,在目标方法中对形参所做的更改不会对调用者的初始变量产生任何影响. 当方法传递的参数是引用类型是,只是将变量的引用复制到目标参数中,实参和形参的引用指向内存中的同一位置.所以,在目标方法中对形参所做的更改会影响调用者的初始变量. 二.一些特殊的方法参数 1.引用参数---ref (使值类型的变量做方法参数时也可以传引用) 一些数据类型(

软件工程课堂练习:返回一个一维整数数组中最大子数组的和

题目:返回一个一维整数数组中最大子数组的和.要求:输入一个一维整形数组,数组里有正数也有负数.一维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值. 此次何琳琳负责程序分析,代码编程,张一博负责代码复审和代码测试计划. 经分析讨论设计思路如下: 1.定义一个长为20的数组,先对前10个数进行初始化,后10个数等于前10个数: 2.设置长度为10的循环依次以前十个数为头进行最大子数组的计算: 3,再设置一个数组用来存储

C#参数数组的用法1

C# 参数数组  C# 数组 有时,当声明一个方法时,您不能确定要传递给函数作为参数的参数数目.C# 参数数组解决了这个问题,参数数组通常用于传递未知数量的参数给函数. params 关键字 在使用数组作为形参时,C# 提供了 params 关键字,使调用数组为形参的方法时,既可以传递数组实参,也可以只传递一组数组.params 的使用格式为: public 返回类型 方法名称( params 类型名称[] 数组名称 ) 实例 下面的实例演示了如何使用参数数组: using System; na