Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Злобастик, Вы писали:
З>>Коллеги, добрый день!
З>>Возникла следующая проблема. Есть словарь, где ключ — это идентификатор модели, а значение — объект, являющийся наследником от базового абстрактного класса AbstractModel. (Т.е. тип словаря — Dictionary<string, AbstractModel>) Классов-наследников достаточно много. Для примера назовем их ConcreteModel1, ConcreteModel2 и т.д. Задача следующая — по заданному идентификатору (ключу) необходимо привести соответствующий объект (значение) к конкретному типу. Проблема в том, что тип этот я не знаю. Пока что вижу 3 варианта решения:
З>>1. Добавить в AbstractModel поле перечислимого типа, по которому можно было бы определить тип модели (возникают риски при ошибке указания нужного перечисления) З>>2. Использовать рефлекшн (неэстетично) З>>3. Использовать говнокод (var cm = abstractModel as ConcreteModel1; if (cm != null) { делаем приведение })
З>>Задача выглядит тривиальной, но я за 10 лет ни с чем подобным не сталкивался. Может быть, есть какие-нибудь варианты элегантного решения?
А>Зачем приводить в итоге ? что дальше? А>Например можно использовать interface
Конкретный тип нужен для того, чтобы понять, каким алгоритмом его обрабатывать. А интерфейс как поможет? Я что-то в упор не вижу.