Я участвую в создании библиотеки под названием Fasterflect , целью которой является "улучшение опыта разработчика в использовании отражения". Таким образом, он обеспечивает абстракцию, построенную поверх классического отражения, и будет использоваться в точно таких же сценариях.
Ниже показан текущий синтаксис для доступа к членам через экземпляр объекта:
obj.SetPropertyValue( "PropertyWithPrivateSetter", "foo" );
obj.SetFieldValue( "_readOnlyIntegerProperty", 123 );
Один пользователь предложил добавить поддержку доступа на основе lamdba (по аналогии с Fluent Hibernate):
obj.SetPropertyValue<MyClass>( x => x.PropertyWithPrivateSetter, "foo" );
obj.SetFieldValue<MyClass>( x => x.ReadOnlyInteger, Access.CamelCaseField(Prefix.Underscore), 123 );
Мне трудно думать о сценариях, в которых это было бы полезно, учитывая, что рефлексия обычно выполняется для типов, о которых вы не знаете во время компиляции. Мне просто не хватает воображения? Существуют ли допустимые сценарии для отражения, когда вы знаете тип во время компиляции?
Существует некоторый дополнительный контекст для исходного предложения на этом запросе функции NBuilder , и вы также можете просмотреть запрос Fasterflect .