C# params可变参数的使用注意详析

C# params 可变参数的使用注意详析

什么是 params?

C# 中的 params 关键字可以让我们定义一个可变长度参数列表。使用 params 关键字的方法可以接受零个或多个参数,参数在方法内部被视为数组,可以像普通数组一样进行访问。

使用 params 关键字定义的参数必须是方法的最后一个参数,而且一个方法只能拥有一个 params 关键字定义的参数。

如何使用 params?

定义 params 参数的语法如下:

void function(params type[] parameterName)

参数 type 可以是任意类型,包括基本类型和自定义类型。

下面是一个示例:

public int Sum(params int[] numbers)
{
    int result = 0;
    foreach (int number in numbers)
    {
        result += number;
    }
    return result;
}

上面的方法接受一个可变长度参数列表 numbers,返回这些参数的总和。

我们可以像下面这样调用这个方法:

int sum = Sum(1, 2, 3, 4);

这样,参数 1, 2, 3, 4 将被自动打包成数组 [1, 2, 3, 4] 作为参数传给 Sum 方法。

注意事项

  1. params 参数必须是方法的最后一个参数

在方法定义中,如果同时使用 params 关键字和其他参数,那么这些其他参数必须在 params 参数之前声明。否则编译器将会报错。

void function(params type[] parameterName, otherParameterType otherParameterName) // 错误,params 参数不是最后一个参数
void function(otherParameterType otherParameterName, params type[] parameterName) // 正确,params 参数是最后一个参数
  1. params 参数必须是数组

在定义 params 参数时,必须显式指定数组类型。

void function(params int[] parameterName) // 正确
void function(params List<int> parameterName) // 错误,List<int> 不是数组类型
  1. 可变参数可以为零个

如果可变参数列表为空,那么传入的数组将是空数组,而不是空引用。

public void function(params int[] parameterName)
{
    Console.WriteLine(parameterName == null); // false
    Console.WriteLine(parameterName.Length); // 0
}

示例

  1. 可变参数列表和普通参数共存:
public int Multiply(int a, params int[] b)
{
    int result = a;
    foreach (int n in b)
    {
        result *= n;
    }
    return result;
}

int r1 = Multiply(2, 3, 4); // r1 = 2 * 3 * 4 = 24
int r2 = Multiply(2); // r2 = 2

在上面的例子中,Multiply 方法接受一个普通的参数 a,和一个可变长度参数列表 b。当 b 参数为空时,只返回 a 参数本身。

  1. 带 params 参数的方法重载:
public int Sum(params int[] numbers)
{
    int result = 0;
    foreach (int number in numbers)
    {
        result += number;
    }
    return result;
}

public double Sum(params double[] numbers)
{
    double result = 0;
    foreach (double number in numbers)
    {
        result += number;
    }
    return result;
}

int r1 = Sum(1, 2, 3, 4); // r1 = 1 + 2 + 3 + 4 = 10
double r2 = Sum(1.0, 2.5, 3.2); // r2 = 1.0 + 2.5 + 3.2 = 6.7

在上面的例子中,我们定义了两个重载方法 Sum,分别接受 intdouble 类型的可变参数列表。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# params可变参数的使用注意详析 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C# Lambda 知识回顾

    C# Lambda 知识回顾 什么是Lambda表达式 Lambda表达式是C# 3.0中引入的一个新特性,它可以使我们更简洁的书写代码。Lambda表达式本质上是一个匿名方法,它可以被用来创建委托或表达式树。Lambda表达式对于编写LINQ查询表达式或事件处理程序代码非常有用。 Lambda表达式的语法如下: (parameter_list) =>…

    C# 2023年6月6日
    00
  • asp.net小谈网站性能优化

    ASP.NET小谈网站性能优化攻略 1. 确认问题 在进行优化之前,我们需要确认当前网站存在的性能问题,可以通过下列几种方式来确定: 使用各种性能分析工具和监控工具,识别哪些请求是最缓慢的,以及可能是瓶颈的地方 观察Web服务器、数据库服务器的监控信息和性能数据,确认是否存在资源瓶颈(如 CPU、内存、I/O、网络带宽等) 观察 Web 应用程序日志,看是否…

    C# 2023年5月31日
    00
  • SQL Server 2008 新特性 总结复习(一)

    SQL Server 2008 新特性 总结复习(一) SQL Server 2008 是微软公司开发的一款数据库管理系统软件,它具有很多新特性,本文将会对其中一些新特性进行详细讲解。 1. 影响行的Trigger 在 SQL Server 2008 中,Trigger 变得更加强大了,它可以使用 inserted 和 deleted 表来访问触发器所在表中…

    C# 2023年6月1日
    00
  • ASP.NET Core单文件和多文件上传并保存到服务端的方法

    ASP.NET Core 单文件和多文件上传并保存到服务端的方法 在 ASP.NET Core 中,可以使用多种方式实现单文件和多文件上传并保存到服务端。本攻略将详细介绍 ASP.NET Core 单文件和多文件上传并保存到服务端的方法,并提供多个示例说明。 单文件上传 以下是一个简单的单文件上传示例: 在视图中添加文件上传表单: <form meth…

    C# 2023年5月17日
    00
  • C#启动windows服务方法的相关问题分析

    下面是针对”C#启动windows服务方法的相关问题分析”的完整攻略: 1. 了解Windows服务启动方式 在进行C#编程启动Windows服务之前,需要先了解Windows服务启动的几种方式: 自动:随着系统启动而启动。 自动(延迟启动):在系统启动完成后,延迟几个时间单位后启动。 手动:需要手动启动。 禁用:无法启动。 具体启动方式可在控制面板中的“管…

    C# 2023年5月15日
    00
  • 如何通过C#/VB.NET代码将PowerPoint转换为HTML

    利用PowerPoint可以很方便的呈现多媒体信息,且信息形式多媒体化,表现力强。但难免在某些情况下我们会需要将PowerPoint转换为HTML格式。因为HTML文档能独立于各种操作系统平台(如Unix,Windows等)。并且它可以加入图片、声音、动画、影视等内容,还能从一个文件跳转到另一个文件,与世界各地主机的文件连接。通过HTML可以表现出丰富多彩的…

    C# 2023年5月5日
    00
  • c# 值类型实例构造器

    C#值类型实例构造器 在C#中,值类型是一种基本数据类型,如int、double、char、bool等等。与引用类型不同,值类型的实例被存储在堆栈中,而不是在堆中。C#值类型实例构造器是一种特殊的方法,在值类型实例被创建时,它会被自动调用。本文将详细讲解C#值类型实例构造器的用法和示例。 构造器的概念和特点 构造器是一种特殊的方法,它用于初始化一个类的实例。…

    C# 2023年5月15日
    00
  • C#基础知识之字符串和正则表达式

    C#基础知识之字符串和正则表达式 一、字符串 1. 字符串的定义 在 C# 中,字符串是一个不可变的对象,表示文字和其他字符序列。C# 中的字符串对象是 System.String 类型的实例。创建字符串即是创建 String 对象,并使用双引号或 @-引号字符串来表示字符串值。如: string str1 = "Hello world!&quot…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部