#c_sharp #net
Например, из вне приходит какой-то объект неизвестного типа. Известно, что объекты могут быть разными(разные поля), но одно поле всегда есть у данного объекта. Через Dynamic- это тривиальная задача, а как это делалось, когда он не был введен в C#? UPD Пример кода работы с Dapper, где руками мапятся колонки var codes = conn.Query(...sql and params here...) .Select (s=>new Code{Id = s.Id, Type = s.Type, Value = s.code, Description = s.Description});
Ответы
Ответ 1
Если говорить в целом, то до появления dynamic работа с логикой объектов неизвестного типа (а знание о том, что у объекта есть определенный атрибут и, тем более, операции с ним - это, хочешь не хочешь, а работа с логикой) в языке программирования со строгой типизацией считалось дурным тоном и bad practice. Некоторые олдфаги, типа меня, считают так до сих пор. Но если очень надо, то есть два варианта: наследование и Reflection. Наследование применяется в тех случаях, когда у вас есть контроль над моделью данных - тогда можно сделать либо базовый класс, либо (еще лучше) интерфейс с нужным полем, отнаследоваться, в нужном месте скастовать и далее работать уже как с обычным объектом. Вариант с reflection применяется, если наследование делать нельзя или не хочется - например, мы используем модель данных из внешней библиотеки. В этом случае, мы просто лезем внутрь объекта и при помощи reflection'а выдираем нужное поле. Оформить этот процесс в реализацию можно множеством способов. Можно использовать какой-нибудь фреймворк, который обернет несколько команд в одну типа GetPropertyValue. Можно сделать класс с нужными полями и, используя автомаппер (которых есть великое множество), скопировать поля неизвестного объекта в наш объект. Можно все поля неизвестного объекта скинуть в Dictionary и работать уже с ним.
Комментариев нет:
Отправить комментарий