Интересно, можно ли использовать Dictionary<string, MyType>
в качестве фабрики объектов, другими словами, с учетом строки «Foo». Я хочу получить новый экземпляр класса Foo
.Использование словаря для создания новых экземпляров объектов
private Dictionary<string, MyType> ClassDic = new Dictionary<string, MyType>()
{
{"Foo", new Foo()},
{"Bar", new Bar()},
//many more
}
Что я в принципе хочу сделать, это заменить много если заявления, а затем вручную создавать объект:
if(line == "Foo") { Stuff.Add(new Foo() { ID = i }; }
if(line == "Bar") { Stuff.Add(new Bar() { ID = i }; }
(Foo
и Bar
выводим как из того же базового класса)
примерно на следующее:
BaseClass myObject;
if(ClassDic.TryGetValue(line, out myObject))
{
Stuff.Add(myObject);
myObject.ID = i;
}
проблема в моем коде, словарь дает мне одну и ту же ссылку на объект, поэтому свойства переписываются (например, если у меня есть 300 объектов, все 300 будут иметь тот же ID (последний) в конце).
Я также открыт для других подходов к решению этой проблемы.
Непонятно, что вы просите. Какая картина больше? Чего вы хотите достичь (полное описание)? Это об объектной фабрике или о том, что неправильные идентификаторы в вашем словаре? – DrKoch
Возможно, вам стоит подумать об отражении –