我打算在一個項目中使用多個名稱索引的字典。我的第一個選擇是使用string
鍵,它只是我的Value
元素的名稱屬性。字典鍵的類型安全性?
然而,這使得字典鍵相同,即使他們正在訪問不同的類型:
private Dictionary<string, Foo> myFoos;
private Dictionary<string, Bar> myBars;
myFoos[bar.Name]; // shouldn't be able to do this!
我想關鍵是類型互不兼容,使他們無法相互混淆:
private Dictionary<FooName, Foo> myFoos;
private Dictionary<BarName, Bar> myBars;
由於每個Value
類型創建一個*Name
類是矯枉過正,我創建一個Name<T>
類:
public struct Name<T>
{
public string Name;
// for convenience, could be explicit instead
static implicit operator string(Name<T> name)
{
return name.Name;
}
}
這會給我
private Dictionary<Name<Foo>, Foo> myFoos;
private Dictionary<Name<Bar>, Bar> myBars;
,然後我可以存儲Name<Foo>
實例,而不是字符串。
這看起來有點笨拙,但這是迄今爲止我所見過的最好 - 關於如何更好地實現它的任何建議?
這是錯誤的,或真棒?
當我想存儲Foo擁有的酒吧列表時,問題就出現了。而不是存儲酒吧的第二個副本,我正在存儲Bar.Name - 並且一個Dictionary>開始渾濁水域。 –
mskfisher
2011-01-07 14:10:35