• 集合表达式 (`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. 高级表单特性 六、布局系…