Может ли С# имя свойства экземпляра ссылки оператора без экземпляра?

Я регулярно хочу получить имя свойства экземпляра типа, когда у меня нет экземпляра. В настоящее время для этого я использую следующую встроенную функцию, которая интерпретирует параметр 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);

Неэффективно, но достаточно любопытно.