Если вы ищете решения во время сборки, самым простым может быть генерация кода с помощью рефлексии, но я ничего не знаю "из коробки".
Я не уверен, что вы имеете в виду, имея доступ к имени свойства безопасным для типов способом; Вы можете создать статическую карту имени / класса во время сборки и проверить это.
Похоже, вы пытаетесь получить имя свойства из определенного класса, но в этом нет ничего особенно интересного - это можно обработать с помощью обычного отражения, поскольку вы должны указать класс из которого можно получить свойства.