Я задавался вопросом о целесообразности отражения в коде С#. Например, я написал функцию, которая выполняет итерации через свойства данного исходного объекта и создает новый экземпляр указанного типа, а затем копирует значения свойств с тем же именем из одного в другое. Я создал это для копирования данных из одного автоматически сгенерированного объекта LINQ в другой, чтобы обойти отсутствие наследования из нескольких таблиц в LINQ.
Однако я не могу не думать, что такой код действительно "обманывает", то есть вместо того, чтобы использовать предоставленные языковые конструкции для достижения заданного конца, он позволяет обойти их.
В какой степени приемлемый код? Каковы риски? Что такое законное использование этого подхода?