自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談 C# 13 中的 Params 集合

開(kāi)發(fā) 前端
在 C# 13 中,params?的改進(jìn)使其從可變數(shù)量的數(shù)組參數(shù)升級(jí)為可變數(shù)量的集合類型參數(shù)。這一改進(jìn)通過(guò)支持高性能集合類型(如Span<T>,ReadOnlySpan<T>)和簡(jiǎn)化調(diào)用語(yǔ)法,顯著提升了代碼的靈活性和效率。

前言

在 C# 13 中,params 的改進(jìn)使其從可變數(shù)量的數(shù)組參數(shù)升級(jí)為可變數(shù)量的集合類型參數(shù)。這一改進(jìn)通過(guò)支持高性能集合類型(如Span<T>,ReadOnlySpan<T>)和簡(jiǎn)化調(diào)用語(yǔ)法,顯著提升了代碼的靈活性和效率。

params的適用場(chǎng)景

params適用于參數(shù)個(gè)數(shù)動(dòng)態(tài)變化的場(chǎng)景,例如日志、數(shù)學(xué)計(jì)算或格式化輸出等,減少冗余代碼,增強(qiáng)方法通用性。

C# 13 的改進(jìn)與舊版本對(duì)比

在 C# 13 之前:

params 僅支持一維數(shù)組(如params int[] list、params object[] list)。調(diào)用方法時(shí)需顯式傳遞數(shù)組或數(shù)組元素類型的參數(shù)的逗號(hào)分隔列表。

在 C# 13 中:

params 修飾符并不局限于數(shù)組類型。 現(xiàn)在可以將 params 用于任何已識(shí)別的集合類型,包括 System.Span<T>、System.ReadOnlySpan<T>,以及那些實(shí)現(xiàn) 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>。

注意事項(xiàng)

在方法聲明中的 params 關(guān)鍵字之后不允許有任何其他參數(shù),并且在方法聲明中只允許有一個(gè) params 關(guān)鍵字。

性能基準(zhǔn)測(cè)試

下面我們使用一個(gè)數(shù)據(jù)求和場(chǎng)景,對(duì)C# 13 之前和C# 13 中的改進(jìn)方式使用BenchmarkDotNet做一下性能基準(zhǔn)測(cè)試對(duì)比:

[MemoryDiagnoser]//記錄內(nèi)存分配情況
    [MarkdownExporter, AsciiDocExporter, HtmlExporter, CsvExporter, RPlotExporter]
    public class ParamsBenchmark
    {
        private List<int> dataList = new();

        /// <summary>
        /// 初始化測(cè)試數(shù)據(jù)
        /// 如創(chuàng)建大型數(shù)據(jù)集、分配內(nèi)存資源等,避免在每次基準(zhǔn)測(cè)試迭代中重復(fù)初始化帶來(lái)的性能干擾
        /// </summary>
        [GlobalSetup]
        public void Setup()
        {
            dataList = new List<int> { 1, 2, 3, 4, 5, 6, 7, 9, 10, 22, 55, 66, 88, 44, 66, 33, 77, 54, 24, 8789, 24, 54, 244, 377, 26, 99, 888, 1000 };
        }

        [Benchmark]
        public int CalculateOldSum()
        {
            return OldSumArray(dataList.ToArray());
        }

        [Benchmark]
        public int CalculateNewSumList()
        {
            return NewSumList(dataList);
        }

        /// <summary>
        /// C# 13 之前
        /// </summary>
        /// <param name="datas">datas</param>
        /// <returns></returns>
        public int OldSumArray(params int[] datas)
        {
            return datas.Sum();
        }

        /// <summary>
        /// C# 13 中
        /// </summary>
        /// <param name="datas">datas</param>
        /// <returns></returns>
        public int NewSumList(params List<int> datas)
        {
            return datas.Sum();
        }
    }

基準(zhǔn)測(cè)試報(bào)告

圖片圖片

  • Mean: 所有測(cè)量值的算術(shù)平均值。
  • Error: 99.9% 置信區(qū)間的一半。
  • StdDev: 所有測(cè)量值的標(biāo)準(zhǔn)差。
  • Gen0: 第 0 代 GC 每 1000 次操作收集一次。
  • Allocated: 每次操作分配的內(nèi)存(僅托管內(nèi)存,包含所有內(nèi)容,1KB = 1024B)。

最后總結(jié)

綜上所述C# 13 中的 params 集合變得類型更靈活,滿足更復(fù)雜的應(yīng)用場(chǎng)景,并且性能得到了進(jìn)一步的提升。

參考文章

責(zé)任編輯:武曉燕 來(lái)源: 追逐時(shí)光者
相關(guān)推薦

2009-05-08 09:46:37

微軟C#集合對(duì)象

2009-08-18 09:06:41

C#對(duì)象和集合

2009-07-31 13:48:34

C# eval()函數(shù)

2009-02-05 15:32:23

接口委托

2009-08-26 15:28:52

C#對(duì)象集合初始化器

2024-11-22 15:39:02

C#Params編程

2009-08-20 18:30:33

C# ReaderWr

2011-09-21 10:56:31

C#結(jié)構(gòu)

2009-08-03 15:06:43

C# Stack對(duì)象C# Queue對(duì)象

2009-09-17 17:13:54

C#數(shù)組

2009-08-14 10:51:43

2009-06-24 10:49:16

JavaScript

2009-09-02 10:58:02

C#動(dòng)態(tài)數(shù)組

2009-08-07 11:26:53

C#數(shù)組結(jié)構(gòu)

2009-08-12 11:24:25

C# String對(duì)象

2009-08-19 17:12:18

C# Connecti

2009-08-31 09:37:09

C# Employee

2009-08-25 16:16:43

C# oledbcon

2009-08-26 15:46:01

C#匿名類型

2009-08-06 15:30:23

C#類型系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)