Может ли C# nameof operator ссылаться на свойство экземпляра без экземпляра?
Я регулярно хочу получить имя свойства экземпляра типа, когда у меня нет экземпляра. В настоящее время для этого я использую следующую внутреннюю функцию, которая интерпретирует Expression[Func[T, object]]
Параметр и возвращает имя свойства:
var str = LinqExtensions.NameOf<ClientService>(x => x.EndDate);
// Now str == "EndDate"
Однако, кажется, стыдно не использовать встроенный nameof
оператор.
К сожалению, кажется, что nameof
Оператор требует либо экземпляр, либо, чтобы ссылаться на статические свойства.
Есть ли аккуратный способ использовать nameof
оператор вместо нашей в доме функции? Например:
nameof(ClientService.EndDate) // ClientService.EndDate not normally syntactically valid as EndDate is instance member
РЕДАКТИРОВАТЬ
Я был совершенно не прав, синтаксис nameof(ClientService.EndDate)
как описано на самом деле работает как есть.
2 ответа
Из документации:
В примерах вы видите, что вы можете использовать имя типа и получить доступ к имени метода экземпляра. Вам не нужно иметь экземпляр типа … [выделение мое]
Т.е. ты должен уметь писать nameof(ClientService.EndDate)
и пусть это работает, вопреки вашему утверждению в вопросе о том, что это "обычно не синтаксически допустимо".
Если у вас возникли проблемы с синтаксисом, приведите хороший пример кода Minimal, Complete и Verifiable, который надежно воспроизводит любую полученную ошибку и предоставит точный текст сообщения об ошибке.
Отличный ответ от @Peter Duniho.
В случае конфликта имен вы также можете сделать следующее:
ClientService clientservice;
var str = nameof(clientservice.EndDate);
Не эффективно, но достаточно любопытно.