2009-07-23 29 views
7

Tôi đã có một MenuManager lớp mà mỗi mô-đun có thể thêm một chìa khóa và và yếu tố để được nạp vào các nội dung chính:Bộ sưu tập C# tốt nhất với hai phím và một đối tượng là gì?

private Dictionary<string,object> _mainContentItems = new Dictionary<string,object>(); 
public Dictionary<string,object> MainContentItems 
{ 
    get { return _mainContentItems; } 
    set { _mainContentItems = value; } 
} 

Vì vậy, các mô-đun khách hàng đăng ký quan điểm của mình như thế này:

layoutManager.MainContentViews.Add("customer-help", this.container.Resolve<HelpView>()); 
layoutManager.MainContentViews.Add("customer-main", this.container.Resolve<MainView>()); 

Vì vậy, sau đó để mang lại một cái nhìn cụ thể vào phía trước tôi nói:

layoutManager.ShowMainContentView("customer-help"); 

Và để có được những chế độ xem mặc định (xem lần đầu tiên đã đăng ký), tôi nói:

layoutManager.ShowDefaultView("customer"); 

Và điều này hoạt động tốt.

Tuy nhiên, tôi muốn loại bỏ các "mã mùi" với gạch nối mà tách tên mô-đun và xem tên, vì vậy tôi muốn đăng ký với lệnh này:

layoutManager.MainContentViews.Add("customer","help", this.container.Resolve<HelpView>()); 

Nhưng những gì là cách tốt nhất để thay thế từ điển hiện tại của tôi, ví dụ những gì nói đến cái tâm là những:

  • Dictionary<string, string, object> (doesn't exist)
  • Dictionary<KeyValuePair<string,string>, object>
  • Dictionary<CUSTOM_STRUCT, object>

Các bộ sưu tập mới cần có khả năng để làm điều này:

  • được một cái nhìn với khóa mô-đun và chế độ xem (ví dụ: "khách hàng", "trợ giúp" trả về 1 chế độ xem)
  • lấy một bộ sưu tập tất cả các chế độ xem theo khóa mô-đun (ví dụ: "khách hàng" trả về 5 lượt xem)

Trả lời

13

Đáp ứng đúng tiêu chí của bạn, sử dụng Dictionary<string, Dictionary<string, object>>;

var dict = new Dictionary<string, Dictionary<string, object>>(); 
... 
object view = dict["customer"]["help"]; 
Dictionary<string, object>.ValueCollection views = dict["customer"].Values; 
+0

Elegant sử dụng. – Will

+0

hoạt động tốt, cảm ơn. –

+0

Nếu chỉ có tôi đã thấy thêm một var ở đó ... – nawfal

1

Bạn đang mô tả âm thanh như khóa tổng hợp trong từ điển, thay vì hai phím. Tôi khuyên bạn nên thiết lập cấu trúc đơn giản để đại diện cho khóa này:

struct Section { 
    string Area { get; set; } 
    string Area2 { get; set; } 

    // override ToHashCode, Equals and implement IComparable. 
} 
4

Như đã đề cập trong một similar thread, một cách tốt để đại diện cho một cuốn từ điển 2-key trong .NET 4 là sử dụng lớp Tuple:

IDictionary<Tuple<K1, K2>, V> 
Các vấn đề liên quan