CLR 支援一維、多維、交錯陣列。宣告不指定長度;new 時指定長度。Array 型別宣告較靈活但非型別安全;String[] 型別安全。所有陣列隱式繼承 System.Array(繼承自 System.Object),故陣列為引用類型。
new 時建立實際物件,元素初始化為 0。new 時僅建立參考,不建立實際物件。Array.Copy。Array.Copy 復制時可進行必要型別轉換:值類型裝箱、引用類型拆箱、基元類型擴寬、不相容類型向下轉換。Object[] oa = new String[100]; oa[3] = 1; 拋出例外)。System.Buffer.BlockCopy(僅支援基元類型,無轉型能力,速度較快)。IEnumerable<T>、ICollection<T>、IList<T>,並為所有基底類型 B 實作對應介面(如 FileStream[] 可傳給 IList<Stream>)。T 實作上述介面,不為基底類型實作(如 DateTime[] 不可傳給 IEnumerable<Object>)。Array.Copy 為淺層複製。陣列宜用零長度而非 null。
使用 Array.CreateInstance 多載指定元素類型、維度、下界、各維長度。可用 GetLowerBound/GetUpperBound 取得邊界。一維陣列可用 GetValue/SetValue 操作(較慢)。
String[];非零基為 String[*];多維陣列皆為 String[,](執行期視為非零基)。for 迴圈中 Length 屬性經 JIT 快取,不重複計算。將 Length 存入區域變數反而損害效能。提升效能兩招: 用交錯陣列取代多維陣列;用非安全程式碼存取非零基陣列(關閉邊界檢查,僅限基元值類型)。文中附非安全存取二維陣列完整範例。
stackalloc 在執行緒堆疊配置(僅限一維零基值類型陣列,且值類型不可含引用類型)。範例:stackalloc 反轉字串。unsafe 標記結構、fixed 標記欄位、一維零基、基元值類型。範例:fixed Char Characters[20] 反轉字串。