2011-06-27 53 views
3

我正在開發一個應用程序,我在運行時添加控件,並跟蹤這些控件我正在維護單獨的哈希表,以便它可以很容易地做我想做的事情他們以後。但是我有大約6個哈希表,並且保持這些有點複雜。所以我想知道我是否可以將所有這些控件都放到一個數據結構中,但是我應該很容易地識別它們,就像我在散列表中一樣。基本上我想要的是散列表的擴展版本,我可以在一個鍵上添加多個值。比如我現在已經是數據結構,以消除c中的多個哈希表#

hashtable addButtons = new hashtable(); 
hashtable remButtons = new hashtable(); 

addButtons.add(name,b); 
remButtons.add(name,r); 

現在它會很酷,如果我可以這樣做

addButtons.add(name=>(b,r,etc,etc)); 

,然後得到任何它就像哈希表一樣

addButtons[name][1] 

任何人都可以告訴我,如果這樣的事情可能在C#中。

+0

我有點困惑。這是不是可以通過'Dictionary >'來實現嗎? – user122211

回答

1

我會代表的6件事一類...

public class SomeType { // RENAME ME 
    public int AddButton {get;set;} 
    public string RemoveButton {get;set;} 
    public DateTime Some {get;set;} 
    public float Other {get;set;} 
    public decimal Names {get;set;} 
    public bool Here {get;set;} 
} // ^^ names and types above just made up; FIX ME! 

Dictionary<string,SomeType> - 那麼你可以:

yourField.Add(name, new SomeType { AddButton = ..., ..., Here = ... }); 

var remButton = yourField[name].RemoveButton; 
+0

這一個看起來完全像我想要的...謝謝 – swordfish

3

Dictionary<String, List<?>>怎麼樣?

結合是這樣的:

public static class Extensions 
{ 
    public static void AddItemsWithName<T>(this Dictionary<String, List<T>> this, string name, params T[] items) 
    { 
      // ... 
    } 
} 

會給你一些非常接近你要找的語法。

1

聽起來像是你想詞典詞典,如:

var d = new Dictionary<string, Dictionary<string, Control>>(); 

//Create new sub dictionary 
d.Add("name1", new Dictionary<string, Control>()); 

//Add control 
d["name1"].Add("btnOne", btnOne); 

//Retrieve control 
var ctrl = d["name1"]["btnOne"]; 
2

不知道我正確理解你的問題。像這樣?

var controlsDictionary = new Dictionary<string, List<Control>>(); 

var b1 = new Button(); 
var b2 = new Button(); 

controlsDictionary["AddButtons"] = new List<Control> { b1, b2 }; 

var firstButton = controlsDictionary["AddButtons"][0];