首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 列舉、結構體與陣列:複合資料類型建構完全指南

     編輯:關於C#

複合類型設計哲學

基本型別 (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>、運算子多載

陣列完整操作

進階陣列操作

// 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 / 集合

列舉範例
結構體範例
陣列範例1
陣列範例2

本文對應《叩響 C# 之門》第 5 章列舉、結構體和陣列教學內容

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型宣告特性
一維int[] arr = new int[5];零基底、固定長度、連續記憶體
多維 (矩形)int[,] matrix = new int[3,4];單一物件、GetLength(0/1)、foreach 逐列
交錯int[][] jagged = new int[3][];陣列的陣列、每列長度可異、存取 jagged[i][j]