成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談 C# 13 中的 Params 集合

開發 前端
在 C# 13 中,params?的改進使其從可變數量的數組參數升級為可變數量的集合類型參數。這一改進通過支持高性能集合類型(如Span<T>,ReadOnlySpan<T>)和簡化調用語法,顯著提升了代碼的靈活性和效率。

前言

在 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做一下性能基準測試對比:

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

        /// <summary>
        /// 初始化測試數據
        /// 如創建大型數據集、分配內存資源等,避免在每次基準測試迭代中重復初始化帶來的性能干擾
        /// </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();
        }
    }

基準測試報告

圖片圖片

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

最后總結

綜上所述C# 13 中的 params 集合變得類型更靈活,滿足更復雜的應用場景,并且性能得到了進一步的提升。

參考文章

責任編輯:武曉燕 來源: 追逐時光者
相關推薦

2009-05-08 09:46:37

微軟C#集合對象

2009-08-18 09:06:41

C#對象和集合

2009-02-05 15:32:23

接口委托

2009-07-31 13:48:34

C# eval()函數

2009-08-26 15:28:52

C#對象集合初始化器

2011-09-21 10:56:31

C#結構

2009-08-20 18:30:33

C# ReaderWr

2024-11-22 15:39:02

C#Params編程

2009-08-03 15:06:43

C# Stack對象C# Queue對象

2009-08-14 10:51:43

2009-09-17 17:13:54

C#數組

2009-06-24 10:49:16

JavaScript

2009-08-26 13:15:38

C#選擇控制

2009-08-26 15:46:01

C#匿名類型

2009-08-25 16:16:43

C# oledbcon

2009-08-14 17:58:05

C#接口方法

2009-08-20 10:24:52

C#開發WinForm

2009-09-02 15:41:21

C# HTTPWebR

2009-08-06 15:30:23

C#類型系統

2009-08-19 17:12:18

C# Connecti
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 拍真实国产伦偷精品 | 在线一区| 日韩在线一区二区三区 | av中文字幕在线观看 | 国产精品美女久久久久aⅴ国产馆 | 伦理片97 | 激情婷婷成人 | 欧美色综合天天久久综合精品 | 黄色av网站在线观看 | 久久综合狠狠综合久久综合88 | 999久久久久久久久6666 | av在线伊人 | 成人三级电影 | 色综合一区二区 | 欧美乱码精品一区二区三区 | 久久久久成人精品免费播放动漫 | 国产目拍亚洲精品99久久精品 | 天天操天天干天天爽 | 国产精品美女久久久久久久网站 | 久久成人免费 | 中文字幕国产 | 久久久久国产精品一区二区 | 超碰在线免费av | 国产久| 91 久久 | 国产成人91| 国产欧美精品一区二区三区 | 男女国产视频 | 欧美aⅴ片 | 欧美中文字幕在线观看 | 久久青 | 国产精品一区二区三区久久 | 久久久影院| 亚洲国产一区二区在线 | 蜜臀久久99精品久久久久野外 | av网站在线免费观看 | 成人免费一区二区三区视频网站 | 亚洲一区二区三区视频 | 国产成人亚洲精品自产在线 | 99在线免费视频 | 玖玖视频网|