Может ли 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);

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

Другие вопросы по тегам