浅谈 C# 13 中的 params 集合
前言
在 C# 13 中,params 的改进使其从可变数量的数组参数升级为可变数量的集合类型参数。这一改进通过支持高性能集合类型(如Span<T>,ReadOnlySpan<T>)和简化调用语法,显著提升了代码的灵活性和效率。
params 的适用场景
params 适用于参数个数动态变化的场景,例如日志、数学计算或格式化输出等,减少冗余代码,增强方法通用性。
C# 13 的改进与旧版本对比
在 C# 13 之前:
params 仅支持一维数组(如params int[] list、params object[] list)。调用方法时需显式传递数组或数组元素类型的参数的逗号分隔列表。
在 C# 13 中:
params 修饰符并不局限于数组类型。 现在可以将 params 用于任何已识别的集合类型,包括 System.Span<T>、System.ReadOnlySpan<T>,以及那些实现 System.Collections.Generic.IEnumerable<T> 并具有 Add 方法的类型。 除了具体类型外,还可以使用接口 System.Collections.Generic.IEnumerable<T>、System.Collections.Generic.IReadOnlyCollection<T>、System.Collections.Generic.IReadOnlyList<T>、System.Collections.Generic.ICollection<T>和 System.Collections.Generic.IList<T>。
注意事项
在方法声明中的 params 关键字之后不允许有任何其他参数,并且在方法声明中只允许有一个 params 关键字。
性能基准测试
下面我们使用一个数据求和场景,对 C# 13 之前和 C# 13 中的改进方式使用BenchmarkDotNet做一下性能基准测试对比:
基准测试报告
Mean: 所有测量值的算术平均值。
Error: 99.9% 置信区间的一半。
StdDev: 所有测量值的标准差。
Gen0: 第 0 代 GC 每 1000 次操作收集一次。
Allocated: 每次操作分配的内存(仅托管内存,包含所有内容,1KB = 1024B)。
最后总结
综上所述 C# 13 中的 params 集合变得类型更灵活,满足更复杂的应用场景,并且性能得到了进一步的提升。
参考文章
https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/proposals/csharp-13.0/params-collections
版权声明: 本文为 InfoQ 作者【追逐时光者】的原创文章。
原文链接:【http://xie.infoq.cn/article/0710a276d4fe0bab5089d6ff3】。文章转载请联系作者。







评论