C#12中引入了新的语法糖来创建常见的集合。并且可以使用..
来解构集合,将其内联到另一个集合中。
支持的类型
- 数组类型,例如 int[]。
- System.Span<T> 和 System.ReadOnlySpan<T>。
- 支持常见泛型集合,例如 System.Collections.Generic.List<T>。
集合表达式使用
以下展示了如何使用集合表达式
static void Main(string[] args)
{
List<string> names1 = ["one", "two"];
List<string> names2 = ["three", "four"];
List<List<string>> names3 = [["one", "two"], ["three", "four"]];
List<List<string>> names4 = [names1, names2];
}
可以看出使用方法十分简单
集合表达式解构
在C#12中通过..
即可将一个集合解构,并将其作为另一个集合的元素。
static void Main(string[] args)
{
List<string> names1 = ["one", "two"];
List<string> names2 = ["three", "four"];
List<string> name = [.. names1, .. names2];
}
自定义类型支持集合表达式
类型通过编写 Create() 方法,和对集合类型应用System.Runtime.CompilerServices.CollectionBuilderAttribute
选择加入集合表达式支持。以下是个例子
[CollectionBuilder(typeof(LineBufferBuilder), "Create")]
public class LineBuffer : IEnumerable<char>
{
private readonly char[] _buffer = new char[80];
public LineBuffer(ReadOnlySpan<char> buffer)
{
int number = (_buffer.Length < buffer.Length) ? _buffer.Length : buffer.Length;
for (int i = 0; i < number; i++)
{
_buffer[i] = buffer[i];
}
}
public IEnumerator<char> GetEnumerator() => _buffer.AsEnumerable<char>().GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => _buffer.GetEnumerator();
}
internal static class LineBufferBuilder
{
internal static LineBuffer Create(ReadOnlySpan<char> values) => new LineBuffer(values);
}
internal class Program
{
static void Main(string[] args)
{
LineBuffer line = ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!'];
}
}
首先,需要创建一个包含 Create 方法的类:LineBufferBuilder。LineBufferBuilder.Create
方法必须返回 LineBuffer 对象,并且必须采用 ReadOnlySpan<char> 类型的单个参数。
最后,必须将 CollectionBuilderAttribute
添加到 LineBuffer 类声明。其中,第一个参数提供生成器类的名称, 第二个特性提供生成器方法的名称。
这样一个自定义的类就可以支持集合表达式了。

合集:
.NET8
分类:
.NET Core+
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
2018-11-20 jenkins+docker+docker machine 远程部署
2018-11-20 Centos 查找命令路径
2018-11-20 centos 安装jenkins