C# 13集合表达式是替代传统初始化的主力机制,优先用于静态、尺寸确定场景;编译器依目标类型生成最优实现(如ImmutableArray或数组),支持嵌套、展开(..)及编译期常量折叠,但不支持ICollection等可变接口。
集合字面量(Collection Expressions)在 C# 12 中正式落地,C# 13 进一步强化了嵌套、展开和不可变语义。它不是语法糖的“锦上添花”,而是替代new int[] { }new List { } Enumerable.Range().ToArray()[...][1, 2, 3]new int[] { 1, 2, 3 }[1, 2, 3]ldc.i4.3newarrint[]string[]SpanIReadOnlyListIReadOnlyList x = [1, 2, 3]; ImmutableArrayvar x = [1, 2, 3];xint[]object[]new int[] { 1, 2, 3 }[1, 2, 3][i, i+1, i+2]List.Add() ....[..a, ..b]int[]Array.CopySpanSpan.CopyTo IEnumerableTHashSet..[x, ..list, y, ..span, z]null[..possiblyNullList]NullReferenceException[..possiblyNullList ?? []]var jagged = [[1, 2], [3, 4]];int[][]int[][..jagged[0], ..jagged[1]]IReadOnlyCollectionICollectionIReadOnlyCollectionIReadOnlyListIEnumerableICollectionIListAddRemoveICollection c = [1, 2, 3]; new List { 1, 2, 3 } ListAddAdd[...]Add(T)ISpanFormattable[1, ..GetItems(), 2][...]