Я заказываю возможность читать файлы из другого проекта, я копирую код записи и подстраиваю его под свои нужды.
Я пришел к странной конструкции, которая кажется действительно ужасной, но я неНе знаю, есть ли другой способ справиться с этим.
Код выглядит примерно так:
int type = reader.readInt32():
BaseClass p = BaseClass.Instantiate((BaseClassEnum)type);
object.Read(reader);
Этот код кажется хорошим, и это так, но BaseClass.Instantiate (BaseClassEnumМетод type) оставляет желать лучшего.
По сути, это гигантский оператор case switch, который создает подкласс базового класса в соответствии с переданным параметром type.
Есть ли способ избежать переключениядело здесь?Могу ли я создать словарь, в котором я сопоставлю BaseClassEnum с некоторой ссылкой на класс, которая позволит мне вызывать его конструктор?Что-то вроде:
Dictionary<int, ???> bindings = new Dictionary<int, ???>(){
{BaseClassEnum1, SubClass1},
{BaseClassEnum2, SubClass2}
}
//...
//Assuming SubClass1 has a constructor SubClass1()
BaseClass p = new bindings[BaseClassEnum1]();
//I could even create a new constructor SubClass(BinaryReader reader) and do
BaseCoass p = new bindings[BaseClassEnum1](reader);
В конце код будет выглядеть примерно так:
BaseClass p = new bindings[(BaseClassEnum)reader.ReadInt32()](reader);