使用C#13参数集合可以更轻松更快速地调用方法

C#13提供的功能让您能够更轻松、更安全、更快速地以您熟悉和喜爱的风格编写代码。您可以在C#13中的新增功能中找到C#13功能的完整列表。

C#13实现了一项长期以来的功能请求,现在允许集合表达式支持的任何集合类型作为params参数,而不仅仅是数组。此功能基于C#12中引入的集合表达式功能。

C#13中的新增功能

使用集合表达式奠定基础

C#12中引入了集合表达式,为以前创建各种集合的无数种方法提供了一种替代方法。在方法上下文中,这允许您在许多场景中简化集合的使用,包括调用方法:

//C#12之后WriteByteArray([1,2,3]);WriteByteSpan([1,2,3]);

staticvoidWriteByteArray(byte[]bytes){}staticvoidWriteByteSpan(Spanbytes){}

这也使我们能够统一C#处理集合的方式。请注意,集合表达式可以推断集合的类型和成员的类型。

params数组

params自C#1.0以来就一直存在于该语言中。它允许调用代码以逗号分隔的列表形式包含零到多个参数。该方法以数组形式接收此列表,该列表可能为空:

staticvoidWriteByteArray(paramsbyte[]bytes){}

除了使用值列表进行调用外,您还可以使用数组调用带有params参数的方法。并且从C#12开始,它可以是集合表达式:

params集合

从C#13开始,params可以是任何支持集合表达式的集合类型:

staticvoidWriteByteSpan(paramsSpanbytes){}

虽然这似乎是一个很小的变化,但它通常可以让编译器优化您的代码。例如,如果该方法使用paramsSpan,则编译器可以使用堆栈空间为该方法创建Span。这比分配数组的性能更好。

使用特定类型还可以向调用者传达集合的使用方式。例如,paramsIReadonlyList表示集合不会被修改。

如果您使用paramsIEnumerable,则用户可以传递文字值列表、数组、List、任何实现IEnumerable的集合类型或LINQ表达式:

byte[]bytes=[1,2,3,4,5];WriteByteArray(bytes.Where(x=>x<4));

staticvoidWriteByteArray(paramsIEnumerablebytes){}

当params接收器是接口并且参数是元素的离散列表或集合表达式时,编译器将使用具体类型。许多集合接口都有一个逻辑上合理的默认实现,例如IReadonlyList对应ReadonlyCollection。由于IEnumerable没有如此明显的选择,并且对.NET至关重要,因此它对param和集合表达式都使用了一种特殊的高性能类型。

重载

C#支持重载方法-这意味着如果参数类型不同,则可以存在多个同名方法。您可以像重载其他参数一样对params集合进行重载。

}

//此代码从静态本地函数转变为私有函数//因为局部函数不允许重载。privatestaticvoidWriteNumbers(paramsIEnumerablevalues)=>Console.WriteLine("IEnumerable");privatestaticvoidWriteNumbers(paramsReadOnlySpanvalues)=>Console.WriteLine("Span");}

//结果是:////Span//Span//Span//IEnumerable

例如,您可能在同一个解析范围内有一个带有paramsIEnumerable的重载和一个带有paramsReadOnlySpan的重载。如果您传递一个值列表,则将选择paramsReadOnlySpan重载。如果您传递一个数组,则也将选择paramsReadOnlySpan重载,因为从数组到ReadOnlySpan存在隐式转换。如果您传递List,则将使用paramsIEnumerable重载:

编译器会为您挑选一个合理的重载。如果Span可用,它通常会被优先选择,因为这样可以避免在方法调用中进行内存分配。

无论您是否将params集合添加到您自己的代码中,它们都会使您的应用程序运行得更快,因为.NET运行时库现在可以在更多地方使用Span等高性能类型。您可以使用与params相同的概念,调用者在如何调用方法方面具有更大的灵活性,并且编译器将选择重载。

考虑重载

重载是C#的一个非常强大的功能。但与许多强大的功能一样,正确使用它非常重要。如果有多个同名的方法,它们应该执行相同的操作。它们在执行方式或性能上可能有所不同,但更改传递的类型不会给您的应用程序带来重大更改。通常,这意味着在调整参数值后调用单个实现。

如上例所示,调用代码的微小变化可能会导致调用不同的重载。对于所有C#应用程序来说都是如此,无论您是否使用params集合。

总结

我们对C#13中的参数集合感到非常兴奋,迫不及待地想听听您的想法!

THE END
1.C#方法的单元测试方法编程语言在C#中,我们可以使用xUnit、NUnit或MSTest等测试框架来编写单元测试方法。这里以xUnit为例,展示如何编写一个简单的C#方法的单元测试方法。 首先,假设我们有一个名为Calculator的类,其中包含一个名为Add的方法,该方法接受两个整数参数并返回它们的和: public class Calculator { public int Add(int a, int b) https://m.yisu.com/zixun/941937.html
2.C#Null 条件运算符的一个非常有用的应用程序解决了 C# 自 C# 1.0 以来一直存在的的一个特性,即在调用委托之前检查是否为 null。我们来看一下图 1中显示的 C# 2.0 代码。 图1 在调用委托之前检查是否为 Null XML复制 class Theremostat { event EventHandler<float>OnTemperatureChanged; https://learn.microsoft.com/zh-cn/archive/msdn-magazine/2014/october/csharp-the-new-and-improved-csharp-6-0
3.通过##拼接运算符构建的结构体有什么办法可以取消提示?代码提示未找到变量 https://bbsx.21ic.com/icview-3420906-1-1.html
4.掌握C语言阅读技巧,提升代码理解与编程能力运算符c语言注释是代码中重要的辅助信息,wwk.tianyuanyoupei.Cn,。通过阅读注释,可以快速了解函数的功能、参数的作用以及代码的意图。在阅读代码时,重视注释能大大提高你的理解效率。 分析函数 (Analyze Functions) 在C语言中,函数是构成程序的基本单元。逐个分析每个函数的作用、参数及返回值,可以帮助你更好地理解程序的逻辑。尝https://www.163.com/dy/article/JJFRG95H055670JB.html
5.C#自定义消息框的设置图解C#自定义消息框在系统窗口的右下角弹出。本文以图例说明了C#自定义消息框如何设置。 用C#编写自定义消息框,以下是运行时的截图: C#自定义消息框制作时使用的背景素材: C#自定义消息框窗体的布局设置: 以上C#自定义消息框的设置方法,希望对大家有用。 https://www.51cto.com/article/144469.html
6.C#Winform项目,如何实现提示信息框过35秒自动关闭;不给代码,给你方法1:定义一个用户实体类,并设定成静态全局2:form1登录验证完密码后,将数据库的https://ask.csdn.net/questions/181452
7.C#中messagebox.show怎么用在C中,MessageBox.Show是一个常用的方法,用于显示一个消息框,消息框通常用于向用户显示一些提示信息、警告信息或者错误信息等,本文将详细介绍MessageBox.Show的使用方法和相关技术。 MessageBox.Show的基本用法 1、显示一个简单的消息框 要显示一个简单的消息框,可以使用以下代码: https://www.kdun.com/ask/154580.html
8.通达信的部分功能使用帮助6、信息框底行信息项增加设置方法: [Integrity]这是信息框最底行信息项的设置项 ChatAreaNum=2(0-20左右)信息菜单总条数,看情况设置。 ChatAreaStr01=信息地雷第一项名称 AreaType01=4这个4代表系统的信息地雷,不要改为其它数 ChatURL01= ChatAreaStr02=投资日记第二项名称 http://www.360doc.com/content/18/0512/16/85727_753367369.shtml
9.C#消息提示框,不需用户点确定,提醒后自动消失c#自定义消息框,重写MessageBox,消息提示框 Windows自带的消息框比较丑,特别是转到WIN7下更加,项目中用到的消息框非常多,基本上有提示信息、错误信息、询问信息这三种,从美观角度,MessageBox.show()这个方法出来的消息框有点不尽人意,于是自己写了一个,个人觉得舒服些。 https://www.iteye.com/resource/peiranshuiyu-10247036
10.C#中的Dialog对话框C#教程三、自定义对话框1 模态窗口: ShowDialog():打开模态窗口后,只要不关闭该窗口,鼠标焦点或者光标就会一直停留在该窗口上。只有关闭该窗口后,调用窗口才能继续。模态窗口关闭后,仍可以读取模态窗口中的信息,如窗口的返回状态等,以后还可以使用ShowDialog()使其可见。https://www.jb51.net/article/247995.htm
11.C#无边框窗体移动两种方法哈哈我就要叫这个名C# 无边框窗体 移动 两种方法 c 无边框窗体 移动 两种方法 杂谈 网上和书上大致有两种方法,各有长短吧。 一种是使用Windows API: //需添加using System.Runtime.InteropServices; [DllImport("user32.dll")] public static extern bool ReleaseCapture();https://blog.sina.com.cn/s/blog_6b7c38030100xx17.html
12.介绍一款C#中可携带附加消息的增强消息框(MessageBoxEx)使用本消息框就可以解决此类问题,比如可以将扼要信息显示在主消息区,将大量的明细消息(例如批量处理中的单项处理情况)、次要消息、异常信息等放置在详细信息区,由用户或IT支持人员自己去展开获取这些信息。同时,在没有附加消息的时候,你仍然可以像标准消息框一样使用它,所以,如果你跟我一样不会用到标准消息框的IWinhttps://www.php.cn/faq/360717.html
13.C/S框架网快速开发平台.NET开发框架,高效生成Winform软件系统源码C/S开发框各版本功能对比表 云鹊用户授权注册系统 WebApi服务端开发框架 C/S系统版本自动升级软件 C/S框架网产品报价 开发框架文档类别 ? C/S开发框架综合区 (2770) ? C#源码库 (515) ? C/S框架问题解答 (187) ? BUG报告及开发动态 http://www.csframework.com/
14.winform——字体和颜色对话框学习,通过字体对话框设置 (1)首先,要添加FontDialog控件,如下图: (2)其次,要在代码页中写上这两行代码:fontDialog1.ShowDialog();//此方法用于弹出字体对话框control.Font=fontDialog1.Font; 如果没有fontDialog.ShowDialog()这一行,就不会弹出对话框。Font中只包含字形等信息,没有包含字体颜 色,如果要设置字体 https://www.pianshen.com/article/4612187280/
15.C#SqlSugar框架的学习使用(一)SqlSugar简介及创建{ConnectionString="server=.;uid=sa;pwd=@jhl85661501;database=SqlSugar4XTest",DbType=DbType.SqlServer,//设置数据库类型 IsAutoCloseConnection = true,//自动释放数据务,如果存在事务,在事务结束后释放 InitKeyType = InitKeyType.Attribute //从实体特性中读取主键自增列信息 }); //用来打印Sql方便你调试https://cloud.tencent.com/developer/article/1479554