【发布时间】:2011-01-07 13:56:27
【问题描述】:
我计划在一个项目中使用多个名称索引字典。我的第一选择是使用 string 键,它只是我的 Value 元素的 Name 属性。
然而,这使得字典键相同,即使它们访问不同的类型:
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> 实例而不是字符串。
这似乎有点笨拙,但这是我迄今为止想出的最好的方法 - 关于如何做得更好的任何建议?
这是误入歧途,还是很棒?
【问题讨论】:
标签: c# generics dictionary