Besides being slower in setting properties through reflection, this is a design issue, since you apparently shared problems or encapsulated properties through an object-oriented design, which now prevents you from setting them directly. I would say that you look at your design (for example, there may be edge cases) instead of thinking about reflection.
One of the drawbacks, in addition to the impact of performance, is that you use a statically typed language, which is why the compiler checks your code and compiles it. Usually at compile time you are sure that all the properties that you use are and are written correctly. When you start using reflection, you push this check at runtime, which is a real shame, since you (in my opinion) lack one of the biggest advantages of using a static typed language. It will also limit the possibility of refactoring in the near future, since you are not sure if you replaced all cases of assignment, for example, when renaming a property.
source share