Может ли С# имя свойства экземпляра ссылки оператора без экземпляра?
Я регулярно хочу получить имя свойства экземпляра типа, когда у меня нет экземпляра. В настоящее время для этого я использую следующую встроенную функцию, которая интерпретирует параметр 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)
, как описано, действительно работает как есть.
Ответы
Ответ 1
Из документация:
В примерах вы видите, что вы можете использовать имя типа и получить доступ к имени метода экземпляра. Вам не нужно иметь экземпляр типа & hellip; [акцент мой]
т.е. вы должны иметь возможность написать nameof(ClientService.EndDate)
и заставить его работать, вопреки вашему утверждению, в вопросе, что это будет "обычно не синтаксически корректно".
Если у вас возникли проблемы с синтаксисом, предоставьте хороший минимальный, полный и проверенный пример кода, который надежно воспроизводит все ошибки, которые вы получаете, и предоставляете точный текст сообщения об ошибке.
Ответ 2
Отличный ответ от @Peter Duniho.
В случае конфликтов имен вы также можете сделать следующее:
ClientService clientservice;
var str = nameof(clientservice.EndDate);
Неэффективно, но достаточно любопытно.