我打算在一个项目中使用多个名称索引的字典。我的第一个选择是使用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