В общем, предположим задача получать данные из разных типов файлов: txt,access и т д.
Для этого я хочу сделать интерфейс:
interface IDataExtracotr<TOut>{
TOut GetData(string pathToFile)
}
Далее я хочу создать класс на каждый тип и реализовать данный интерфейс. Понятное дело, что при чтении txt-файлов будет возвращаться строка, а при чтении Access-файла DataTable.
Далее, я хотел бы это запихать в словарь, что бы ключом было расширение файла, а значением обработчик.
Так вот, это у меня сделать не получиться из-за разных возвращаемых типов...
Можно ли как-то элегантно решить задачу? Можно рефлексией проверять возвращаемый тип и делать приведение, но это попахивает большим свичем...
К сожалению, мне кажется, без свича точно определить возвращаемый тип нельзя.
Я не знаю, для каких целей вам нужна именно такая архитектура, но более-менее допустимыми решениями можно считать следующие:
IDataHandler
, который использует IDataExtractor
.Data
), а в классе Data
уже сохранять информацию о том, как надо работать с данными. Короче, придумать обобщённый интерфейс. Но и тут без перебора вариантов if
'ами или свичем не обойдётся.UPD: Совсем забыл, если вы планируете работать с этой структурой, заранее зная расширения файла, например вот так:
var textData = Extractors.Get(Extensions.TXT);
То советую пересмотреть Ваш вариант, возможно иная структура классов или иной метод получения нужного экстрактора подойдёт лучше. Вот например:
var extractor = new TextDataExtractor();
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть у меня некоторый обобщённый класс, который делает Request и отдаёт Response:
Как добавить namespace TestApp, TestAppController, TestApp
Есть веб приложение на PHP + БД на MySQLПосле выполнения какого-либо SQL запроса путем отправки данных через HTML форму, если обновить страницу, то SQL запрос...