Как в C# обходились, когда не было Dynamic?

311
09 декабря 2016, 08:56

Например, из вне приходит какой-то объект неизвестного типа.

Известно, что объекты могут быть разными(разные поля), но одно поле всегда есть у данного объекта.

Через Dynamic- это тривиальная задача, а как это делалось, когда он не был введен в C#?

UPD

Пример кода работы с Dapper, где руками мапятся колонки

var codes = conn.Query<dynamic>(...sql and params here...)
                 .Select<dynamic,Code>(s=>new Code{Id = s.Id, Type = s.Type, Value = s.code, Description = s.Description});
Answer 1

Если говорить в целом, то до появления dynamic работа с логикой объектов (а знание о том, что у объекта есть определенный атрибут и, тем более, операции с ним - это, хочешь не хочешь, а работа с логикой) в языке программирования со строгой типизацией считалось дурным тоном и bad practice. Некоторые олдфаги, типа меня, считают так до сих пор.

Но если очень надо, то есть два варианта: наследование и Reflection.

Наследование применяется в тех случаях, когда у вас есть контроль над моделью данных - тогда можно сделать либо базовый класс, либо (еще лучше) интерфейс с нужным полем, отнаследоваться, в нужном месте скастовать и далее работать уже как с обычным объектом.

Вариант с reflection применяется, если наследование делать нельзя или не хочется - например, мы используем модель данных из внешней библиотеки. В этом случае, мы просто лезем внутрь объекта и при помощи reflection'а выдираем нужное поле.

Оформить этот процесс в реализацию можно множеством способов. Можно использовать какой-нибудь фреймворк, который обернет несколько команд в одну типа GetPropertyValue. Можно сделать класс с нужными полями и, используя автомаппер (которых есть великое множество), скопировать поля неизвестного объекта в наш объект. Можно все поля неизвестного объекта скинуть в Dictionary и работать уже с ним.

READ ALSO
Стиль контролов в WPF

Стиль контролов в WPF

Уже третий день бьюсьНаписал триггер для кнопки:

323
Получить привязанный объект из DataGridViewComboBoxCell

Получить привязанный объект из DataGridViewComboBoxCell

У стандартного ComboBox есть свойство SelectedValue, которое можно привести к привязанному типу и получить значение из поля, которое не отображается...

308
пару строчек из C# в Java

пару строчек из C# в Java

Подскажите пожалуйста, как этот метод поиска переписать на Java?

303