Вы можете создать что-то подобное себе.
Вы можете получить список всех открытых свойств для класса с помощью Type.GetMembers ()
Однако вместо генерации кода на C # я бы использовал деревья выражений.
Таким образом, вам не нужно привлекать компилятор C #, когда пользователи меняют правила. Вместо этого вы можете сохранить правила в базе данных, загрузить их во время выполнения, а затем использовать метод Expression.Compile () для создания делегата, который вы можете вызывать для запуска кода.
Обновление:
В комментариях кто-то спросил: «В чем разница между Expression Tress и языками, специфичными для домена?»
Вот ответ:
Деревья выражений и специфичные для предметной области языки являются ортогональными вещами.
Выражения tress - это просто API для представления выражений C #, которые удобно динамически преобразовывать в делегат во время выполнения.
DSL, или предметно-ориентированный язык, - это язык программирования, предназначенный для решения узкого класса проблем.
Это, по сути, совершенно разные вещи.
Вы можете использовать деревья выражений как часть реализации DSL, если хотите. Линк использует их для этой цели.
В вашем случае, однако, вам не нужен DSL. Вам нужен пользовательский интерфейс, который генерирует правила (аналогично тому, как работает outlook), а затем способ их выполнения.
Создание пользовательского интерфейса - это просто нормальная разработка пользовательского интерфейса.
Деревья выражений - это то, что вы можете использовать для реализации правил.