關聯式資料庫常用複合主鍵或唯一索引唯一識別記錄。本文示範如何透過多參數索引器,優雅封裝實體類別的複合鍵查詢邏輯。
public class Employee
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
// 複合鍵:FirstName + LastName
}
public class StaffCollection
{
private Dictionary _dict = new Dictionary();
// 建立複合鍵
private static string MakeKey(string first, string last) => $"{first}|{last}";
public void Add(Employee emp)
{
_dict[MakeKey(emp.FirstName, emp.LastName)] = emp;
}
// 複合鍵索引器:兩個字串參數
public Employee this[string firstName, string lastName]
{
get => _dict.TryGetValue(MakeKey(firstName, lastName), out var emp) ? emp : null;
set
{
var key = MakeKey(firstName, lastName);
if (value == null) _dict.Remove(key);
else _dict[key] = value;
}
}
// 單一鍵索引器(員工編號)
public Employee this[int empId]
{
get => _dict.Values.FirstOrDefault(e => e.Id == empId);
}
}
var staff = new StaffCollection();
staff.Add(new Employee { FirstName = "John", LastName = "Doe", Title = "Engineer" });
// 複合鍵查詢
Employee emp = staff["John", "Doe"]; // 直觀、類字典語法
// 更新
staff["John", "Doe"] = new Employee { FirstName = "John", LastName = "Doe", Title = "Senior Engineer" };
// 刪除
staff["John", "Doe"] = null;
GetByCompositeKey 等方法名。this[DateTime hireDate, string dept] 等其他索引器多載。Staff[\"John\", \"Doe\"])。多參數索引器完美映射複合鍵查詢語意,簡化用戶端程式碼,提升 API 可發現性。下一篇將探討多重檢索路徑(如 ID、拼音、枚舉)的索引器多載設計。