В общем, предположим задача получать данные из разных типов файлов: 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();
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости