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

C# 索引器進階應用(二):多維資料、複雜結構與計算結果封裝

     編輯:關於C語言

前言

索引器不限於一維陣列,可封裝多維陣列、空間資料、樹/圖結構、多因子計算結果。本文以法定節日資訊查詢為例,展示類 DateTimePicker 的直觀存取體驗。

公曆節日資訊類別


public class GregorianCalendarFixture
{
    private Dictionary _holidays = new();

    public GregorianCalendarFixture()
    {
        // 初始化固定節日
        _holidays[new DateTime(1, 1, 1)] = new HolidayInfo("元旦", HolidayType.National);
        _holidays[new DateTime(1, 2, 14)] = new HolidayInfo("情人節", HolidayType.Observance);
        // ... 更多節日
    }

    // 依日期查詢(支援年份忽略)
    public HolidayInfo this[DateTime date]
    {
        get
        {
            var key = new DateTime(1, date.Month, date.Day); // 正規化至元年
            return _holidays.TryGetValue(key, out var info) ? info : null;
        }
    }

    // 依月、日查詢
    public HolidayInfo this[int month, int day]
    {
        get => this[new DateTime(1, month, day)];
    }

    // 依節日名稱查詢(反向索引)
    public IEnumerable this[string holidayName]
    {
        get => _holidays.Where(kv => kv.Value.Name == holidayName).Select(kv => kv.Key);
    }
}

使用體驗


var cal = new GregorianCalendarFixture();

var today = cal[DateTime.Today];           // 今天是否為節日
var newYear = cal[1, 1];                   // 1月1日
var valentineDates = cal["情人節"];        // 所有情人節日期

適用資料結構類型

資料類型索引器參數設計
多維陣列 T[,]this[int x, int y]
空間資料 (2D/3D/4D)this[int x, int y, int z] 或 this[Vector3 pos]
樹狀結構this[string path] (如 \"root/child/leaf\")
圖/語義網路this[NodeId from, NodeId to] 取得邊權重
多因子計算結果this[FactorA a, FactorB b, FactorC c]

設計原則

  • 語意直觀:參數順序、名稱符合領域慣例(如 x, y, z、row, col)。
  • 效能可控:內部用字典、陣列或空間索引(KD-Tree、R-Tree)支援 O(1) 或 O(log n) 查詢。
  • 邊界處理:超出範圍回傳 null 或拋出 ArgumentOutOfRangeException,文件化行為。

結語

索引器是封裝複雜資料存取邏輯的利器。善用多參數、多載、泛型輔助,能讓任何資料結構呈現陣列般直觀的存取介面。

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