C# 12 以前,根据不同的场景,创建不同的集合需要不同的语法。初始化 List<int> 的语法又与 int[] 或 Span<int> 不同。

int[] x1 = new int[] { 1, 2, 3, 4 };
int[] x2 = Array.Empty<int>();
WriteByteArray(new[] { (byte)1, (byte)2, (byte)3 });
List<int> x4 = new() { 1, 2, 3, 4 };
Span<DateTime> dates = stackalloc DateTime[] { GetDate(0), GetDate(1) };
WriteByteSpan(stackalloc[] { (byte)1, (byte)2, (byte)3 });

现在可以使用一种通用又简洁 (terse) 的语法——集合表达式——来创建与初始化它们了。

int[] x1 = [1, 2, 3, 4];
int[] x2 = [];
WriteByteArray([1, 2, 3]);
List<int> x4 = [1, 2, 3, 4];
Span<DateTime> dates = [GetDate(0), GetDate(1)];
WriteByteSpan([1, 2, 3]);

在集合表达式里还可以使用分布元素,将一或多个集合或可枚举表达式的元素组合到一起:

int[] numbers1 = [1, 2, 3];
int[] numbers2 = [4, 5, 6];
int[] moreNumbers = [.. numbers1, .. numbers2, 7, 8, 9];
// moreNumbers contains [1, 2, 3, 4, 5, 6, 7, 8, ,9];

Possible Future Work

  • 未来或许也会支持 字典 以及对 var 自动推算的支持。