首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 陣列部分初始化:指定長度並預設前 N 項值的正確寫法

     編輯:程式設計綜合問答

錯誤嘗試

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 實體化。

方案二:手動配置迴圈(效能最佳、無 Linq 依賴)

int[] a = new int[5];
int[] init = { 1, 2 };
Array.Copy(init, a, init.Length);
// a = [1, 2, 0, 0, 0]
  • Array.Copy 高度優化,適用大陣列。
  • 剩餘元素自動為預設值 0。

方案三:集合初始化器(C# 6+)搭配擴充方法

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++ 差異說明

C++ 允許 int a[5] = {1, 2};,剩餘自動零初始化。C# 設計哲學要求初始化語法與配置語法分離,避免隱含行為導致誤解。若需動態長度+部分值,建議用 List 累加後 .ToArray(),或上述 Array.Copy 模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved