Большинство людей настаивают на попытке метапрограммирования изнутри их любимого языка. Это не работает, если язык не поддерживает метапрограммирование; другие ответы отметили, что C # не делает.
Обойти это можно, выполнив метапрограммирование из вне языка, используя
инструменты преобразования программ . Такие инструменты могут анализировать исходный код и выполнять произвольные преобразования над ним (в любом случае это делает метапрограммирование), а затем выплевывать пересмотренную программу.
Если у вас есть система преобразования программ общего назначения, которая может анализировать произвольные языки, вы можете затем выполнять метапрограммирование на / на любом языке, который вам нравится.
Смотрите наш DMS Software Reengineering Toolkit для такого инструмента, который имеет надежные внешние интерфейсы для C, C ++, Java, C #, COBOL, PHP и ряда других языков программирования и использовался для метапрограммирования на всех из этих.
DMS преуспевает, потому что обеспечивает регулярный метод и инфраструктуру поддержки для полного доступа к структуре программы в виде AST, и в большинстве случаев дополнительные данные, такие как таблицы символов, информация о типе, контроль и анализ потока данных, все необходимое для выполнения сложной программы манипуляция.
РЕДАКТИРОВАТЬ (в ответ на комментарий): Можно применить DMS для реализации задачи OP на C #.