Я планирую использовать несколько именованных словарей в проекте. Моим первым выбором было использование ключа string
, который является просто свойством Name моих 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;
Поскольку создание класса *Name
для каждого типа Value
является излишним, я создал класс 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>
экземпляров вместо строк.
Это кажется немного громоздким, но это лучшее, что я придумал до сих пор - какие-нибудь предложения о том, как сделать это лучше?
Это заблуждение или круто?