複合類型設計哲學
基本型別 (int, double, bool) 為原子單元,透過列舉、結構體、陣列、類別組合建構領域模型。選擇正確複合類型是架構設計關鍵決策。
列舉
[Flags] // 位元旗標模式
public enum FileAccess {
None = 0,
Read = 1 << 0, // 1
Write = 1 << 1, // 2
Execute = 1 << 2 // 4
}
// 使用
var access = FileAccess.Read | FileAccess.Write; // 3
bool canWrite = (access & FileAccess.Write) != 0;
// 字串轉換
string name = FileAccess.Read.ToString(); // "Read"
FileAccess parsed = Enum.Parse("Write");
bool defined = Enum.IsDefined(typeof(FileAccess), 3); // true
結構體 (參考前文 10873 詳細說明)
- 代表單一不可變值
- 小於 16 bytes
- 實作 IEquatable<T>、運算子多載
陣列完整操作
| 類型 | 宣告 | 特性 |
| 一維 | int[] arr = new int[5]; | 零基底、固定長度、連續記憶體 |
| 多維 (矩形) | int[,] matrix = new int[3,4]; | 單一物件、GetLength(0/1)、foreach 逐列 |
| 交錯 | int[][] jagged = new int[3][]; | 陣列的陣列、每列長度可異、存取 jagged[i][j] |
進階陣列操作
// Array 靜態方法
Array.Sort(arr);
Array.BinarySearch(arr, 3);
Array.Reverse(arr);
Array.Copy(src, dest, length);
Array.Resize(ref arr, 10);
// Span/Memory (C# 7.2+) 零複製切片
int[] source = {1,2,3,4,5};
Span slice = source.AsSpan(1, 3); // {2,3,4} 不配置新陣列
Memory mem = source.AsMemory(1, 3); // 可跨非同步邊界
// 模式比對 (C# 8+)
var (first, second, rest) = arr switch {
[var f, var s, .. var r] => (f, s, r),
_ => (0, 0, Array.Empty())
};
類型選擇決策樹
資料是否為單一值?
├─ 是 → 需要參考語意/繼承? → class
│ └─ 否 → 大小<16B/不可變/高頻複製? → struct
│ └─ 否 → class
└─ 否 → 固定數量同質元素? → 陣列
├─ 多維固定 → 多維陣列 [,]
├─ 列長度可變 → 交錯陣列 [][]
└─ 動態增刪 → List / 集合




本文對應《叩響 C# 之門》第 5 章列舉、結構體和陣列教學內容
- 上一篇文章: C# 結構體完整指南:實值型別語意、設計規範與效能優化
- 下一篇文章: C# 分形圖繪製實戰:遞迴與迴圈繪製 Koch Snowflake、Sierpinski Triangle
Copyright ©
程式碼之家 All Rights Reserved