int[] a = new int[5] { 1, 2 }; // CS0178: 秩位指定符無效
C# 不允許同時指定 new int[5] 長度與初始化清單,兩者擇一。
int[] a = new int[] { 1, 2 }.Concat(Enumerable.Repeat(0, 3)).ToArray();
// 結果:[1, 2, 0, 0, 0]
using System.Linq;Enumerable.Repeat(0, 3) 產生 3 個 0,Concat 串接,ToArray 實體化。int[] a = new int[5];
int[] init = { 1, 2 };
Array.Copy(init, a, init.Length);
// a = [1, 2, 0, 0, 0]
Array.Copy 高度優化,適用大陣列。0。public static class ArrayExtensions {
public static T[] PartialInit(this T[] source, params T[] values) {
Array.Copy(values, source, Math.Min(values.Length, source.Length));
return source;
}
}
// 使用
int[] a = new int[5].PartialInit(1, 2);
C++ 允許 int a[5] = {1, 2};,剩餘自動零初始化。C# 設計哲學要求初始化語法與配置語法分離,避免隱含行為導致誤解。若需動態長度+部分值,建議用 List 累加後 .ToArray(),或上述 Array.Copy 模式。