C# 集合表達式和展開運算符 (..) 詳解

  • 集合表達式 (`Collection Expressions`)
    • 基本語法
    • 支持的集合類型
  • 展開運算符 (`..`)
    • 基本用法
  • 實際應用示例
    • 創建新集合
    • 合并集合
    • 與現有API結合
  • 性能考慮
  • 高級用法
    • 多維集合
    • 自定義集合
  • 注意事項
  • 與傳統方式的比較
  • 總結

集合表達式 (Collection Expressions)

C# 12 引入了集合表達式,提供了一種更簡潔的方式來創建和初始化集合。

基本語法

// 創建數組
int[] array = [1, 2, 3];// 創建列表
List<int> list = [1, 2, 3];// 創建跨度(Span)
Span<int> span = [1, 2, 3];

支持的集合類型

集合表達式支持多種集合類型:

  • 數組 (T[])

  • List<T>

  • Span<T>ReadOnlySpan<T>

  • 實現了 IEnumerable<T> 并有合適 Add 方法的類型

展開運算符 (..)

展開運算符用于將現有集合的元素"展開"到新的集合中。

基本用法

int[] numbers1 = [1, 2, 3];
int[] numbers2 = [4, 5, 6];// 合并兩個數組
int[] combined = [.. numbers1, .. numbers2]; 
// [1, 2, 3, 4, 5, 6]// 添加額外元素
int[] withExtra = [.. numbers1, 10, 20, .. numbers2]; 
// [1, 2, 3, 10, 20, 4, 5, 6]

實際應用示例

創建新集合

// 傳統方式
List<string> oldWay = new List<string> { "A", "B", "C" };// 新方式
List<string> newWay = ["A", "B", "C"];

合并集合

List<int> first = [1, 2, 3];
List<int> second = [4, 5, 6];// 合并兩個列表
List<int> merged = [.. first, .. second];

與現有API結合

// 傳遞給需要IEnumerable的方法
ProcessNumbers([1, 2, 3, 4, 5]);void ProcessNumbers(IEnumerable<int> numbers)
{foreach (var num in numbers){Console.WriteLine(num);}
}

性能考慮

集合表達式通常能提供更好的性能

  • 對于數組,編譯器會優化為直接的數組初始化

  • 對于列表,編譯器會使用最有效的方式初始化

高級用法

多維集合

int[][] matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];

自定義集合

要使自定義集合支持集合表達式,需要實現:

  • IEnumerable<T>

  • 有一個可訪問的 Add 方法

public class CustomCollection<T> : IEnumerable<T>
{private readonly List<T> _items = new();public void Add(T item) => _items.Add(item);public IEnumerator<T> GetEnumerator() => _items.GetEnumerator();IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}// 使用
CustomCollection<int> custom = [1, 2, 3];

注意事項

  • 展開運算符 (..) 只能用于集合表達式內部

  • 集合表達式不能用于 null

  • 目標類型必須明確(不能用于 var 推斷)

與傳統方式的比較

特性集合表達式傳統方式
語法簡潔性? 高(單行簡潔語法)? 低(需要更多樣板代碼)
可讀性??? 高(直觀表達意圖)?? 中等(結構略顯冗長)
靈活性🔄 高(支持混合元素和展開)🔄 高(但語法更復雜)
性能? 優化更好(編譯器特殊處理)? 一般(標準初始化流程)
版本要求🆕 C# 12+🏛? 所有版本

總結

C# 的集合表達式和展開運算符提供了:

  • 更簡潔的集合初始化語法

  • 更直觀的集合合并方式

  • 更好的代碼可讀性

  • 編譯器優化的性能優勢

建議在新項目中使用這些特性,特別是在需要頻繁創建或合并集合的場景中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87867.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87867.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87867.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數學視頻動畫引擎Python庫 -- Manim Voiceover 安裝 Installation

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。 Manim Voiceover 是一個為 Manim 打造的專注于語音旁白的插件&#xff1a; 直接在 Python 中添加語音旁白&#xff1a; 無需使用視頻編輯器&…

Git安裝避坑指南:新手村通關秘籍

Git安裝避坑指南&#xff1a;新手村通關秘籍 剛學編程那會兒&#xff0c;Git安裝差點讓我砸鍵盤。滿心歡喜打開官網下載&#xff0c;結果卡在配置上&#xff0c;命令行死活不認識git命令。看著教程里別人行云流水的操作&#xff0c;自己對著報錯信息干瞪眼——這感覺&#xff…

如何修改Siteground max_execution_time值?

這個值在Siteground 上是修改不了的。 以下是來自Siteground 官網的解釋&#xff1a; 由于服務器上全局定義的 PHP 限制&#xff0c;某些 PHP 設置無法更改。最常見的無法更改的 PHP 設置包括&#xff1a; memory_limit max_execution_time max_input_time post_max_size up…

【libm】 11 fmin函數 (fmin.rs)

一、源碼 這段代碼實現了一個符合 IEEE 754-2008 標準的 minNum 函數&#xff08;在 Rust 中命名為 fmin&#xff09;&#xff0c;該功能在 IEEE 754-2019 標準中已被 minimumNumber 取代。 /* SPDX-License-Identifier: MIT OR Apache-2.0 */ //! IEEE 754-2008 minNum. Thi…

React 英語單詞消消樂一款專為英語學習設計的互動式記憶游戲

&#x1f4d6; 項目簡介 英語單詞消消樂 是一款專為英語學習設計的互動式記憶游戲。通過經典的消消樂玩法&#xff0c;讓用戶在輕松愉快的游戲中掌握英語單詞&#xff0c;提高詞匯量和記憶效果。 &#x1f3af; 項目目標 讓英語學習變得有趣且高效通過游戲化方式增強單詞記憶…

Qt:QPushButton、QRadioButton、QCheckBox

目錄 一、QPushButton 1.認識QPushButton 2.設置按鈕圖標 3.設置按鈕的快捷鍵 二、QRadioButton 常用的信號 按鈕的分組 三、QCheckBox 一、QPushButton 1.認識QPushButton QPushButton繼承自QWidget&#xff0c;所以在上一篇文章中介紹的QWidget的屬性&#xff0c;理…

docker 無法拉取鏡像解決方法

目錄 我在omv中通過后臺頁面拉取alist鏡像總是失敗&#xff0c;原因千奇百怪 今天再戰終于解決首先&#xff0c;到dockerhub找鏡像和wiki進入docker賬號設置 找到里面提示了登錄操作和密碼命令行中執行后會提示成功之后按需配置代理&#xff0c;同時檢查自己的配置檢查 Docker …

安卓10.0系統修改定制化_____安卓9與安卓10系統文件差異 有關定制選項修改差異

在修改安卓10的rom之前。我們需要對rom有簡單的了解。區分安卓10與安卓9之間的差異。了解不同安卓版本之間系統文件的變化以及權限的區別。對于修改一些定制化選項有很大的輔助作用. 通過博文了解?????? 1??????-----安卓10與安卓9之間文件實例對比 了解差異 …

HTML表單元素全面指南:從基礎到實踐

引言 HTML表單是網頁開發中不可或缺的一部分&#xff0c;它為用戶提供了與網站交互的途徑。無論是簡單的登錄頁面還是復雜的數據提交界面&#xff0c;表單元素都扮演著關鍵角色。本文將詳細介紹各種HTML表單元素及其使用方法。 輸入框(input元素) input元素是最基礎也是最靈…

深度學習的核心理論與技術

理解深度學習的基本原理、核心算法和關鍵技術 深度學習的核心理論與技術前言一、深度學習核心理論1. 神經網絡基礎核心內容練習資源2. 反向傳播與梯度下降核心內容練習資源3. 卷積神經網絡&#xff08;CNN&#xff09;核心內容練習資源4. 循環神經網絡&#xff08;RNN&#xff…

LinkedList 鏈表數據結構實現 (OPENPPP2)

&#x1f50d; LinkedList 鏈表數據結構實現 (OPENPPP2) &#x1f9f1; 1. 數據結構設計 LinkedListNode 結構 #mermaid-svg-XDJqt6cHMKxodJLG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XDJqt6cHMKxodJLG .er…

RPC/gRPC入門學習

一、RPC 1.1 RPC概念 RPC Remote Procedure Call, 即遠程過程調用&#xff0c;是一種用于構建分布式系統的理念&#xff0c;在一些資料中被稱為“請求-響應”協議。兩個進程可以位于同一系統中&#xff0c;也可以位于不同的系統中&#xff0c;通過網絡相互連接。 RPC使程…

租車小程序電動車租賃小程序php方案

電動車租賃小程序源碼&#xff0c;開發語言后端php&#xff0c;前端uniapp。四個端&#xff1a;用戶端門店端分銷商端小程序&#xff0c;pc管理后臺。一 用戶端&#xff1a;可以掃門店碼&#xff0c;進入門店詳情頁。也可以通過地圖找車。或者門店列表進入&#xff0c;或者快速…

Python數據分析基礎04:預測性數據分析

相關章節&#xff1a; 《Python數據分析基礎03&#xff1a;探索性數據分析》 《python數據分析基礎02&#xff1a;數據可視化分析》 《Python數據分析基礎01&#xff1a;描述性統計分析》 預測性數據分析&#xff08;Predictive Analytics&#xff09; 的深度解析&#xff0…

PFAE(Pyramidal Frequency Attention Extraction)通過頻域注意力機制提高邊界模糊、遮擋等場景的的檢測能力

在偽裝物體檢測中&#xff0c;現有方法多依賴空間局部特征&#xff0c;難以捕捉全局信息&#xff0c;而 Transformer 類方法計算成本高昂。頻率域特征因具備全局建模能力&#xff0c;可有效抑制背景噪聲、提升偽裝物體語義清晰度&#xff0c;但頻域與空域的頻繁轉換會增加計算復…

AE插件安裝方法

Adobe After Effects簡稱AE&#xff0c;是adobe公司開發的一個視頻剪輯及設計軟件&#xff0c;AE軟件能夠實現對素材的非線性編輯而完成畫面的組接&#xff0c;同時還能對任何一部分進行修改&#xff0c;達到想要的結果。AE含有很多腳本、常用的表達式和插件&#xff0c;做動畫…

舵輪時鐘-STM32-28路PWM--ESP8266-NTP時間

1.STM32--PWM生成STM32不具備如此多的PWM&#xff0c;因此采用軟件定時器的方案實現&#xff1a;使用hal庫實現&#xff1b;main.c#include "main.h"#define close1 500#define open 1500#define close 2500// 定時器中斷配置&#xff08;以TIM2為例&#xff09; voi…

Redis的單線程和多線程(單Worker線程)

Redis的單線程和多線程 Redis6.0之前是單線程的&#xff0c;6.0之后是多線程的&#xff0c;我們先了解6.0版本之前的單線程Redis。但其實無論6.0之前還是6.0之后&#xff0c;redis用于工作的線程也只有一個&#xff0c;所以也可以說redis一直是單線程的。 Redis單線程 Redis 6.…

OSPFv3基礎

文章目錄 OSPFv3基礎OSPFv3的改進OSPFv2 v3相同OSPFv2 v3不同 &#x1f3e1;作者主頁&#xff1a;點擊&#xff01; &#x1f916;Datacom專欄&#xff1a;點擊&#xff01; ??創作時間&#xff1a;2025年07月07日22點31分 OSPFv3基礎 OSPFv3協議號依然為89&#xff0c;在I…

前端篇——HTML知識點體系

目錄 一、基礎結構與文本 1. 文檔基礎 2. 文本元素 二、多媒體元素 1. 圖像 2. 音頻 3. 視頻 三、列表系統 1. 無序列表 2. 有序列表 3. 定義列表 四、表格系統 1. 表格結構 2. 合并單元格 五、表單系統 1. 輸入控件 2. 表單元素 3. 高級表單特性 六、布局系…