2016-11-29 1 views
0

Я использую Foolproof library в проекте ASP.Net MVC, и в некоторых случаях мне нужно проверить свойство в классе-члене моей модели, используя атрибуты.Как использовать nameof для получения полного имени свойства в классе в атрибутах C#?

Например, у меня есть класс пользователя, который имеет свойство типа Address, и мне нужно проверить Город в адресе.

Атрибуты должны иметь имя свойства в точечной нотации для моего примера, вы можете сказать «Address.City».

Конечно, это страдает от проблем рефакторинга, если мне нужно изменить либо имена позже (адрес или город)

мне нужно использовать nameof для этой цели, и, конечно, если я использую это так:

nameof(Address.City) 

он будет производить только Город.

Мне нужно имяof, потому что оно дает постоянные значения, которые разрешены в атрибутах.

Я нашел, что ссылка говорит, что это возможно, но не так. https://msdn.microsoft.com/en-us/library/dn986596.aspx в разделе примечаний говорится:

Если вам нужно, чтобы получить полное имя, вы можете использовать выражение TYPEOF вместе с nameof.

но я не мог найти нигде, чтобы сообщить, как это сделать.

Помогите пожалуйста? Заранее благодарим за ваше время и усилия.

ответ

1

После немного копать я обнаружил, что этот вопрос обсуждался уже на развитии этой функции здесь https://roslyn.codeplex.com/discussions/552376 и специально здесь https://roslyn.codeplex.com/discussions/552377 для комментариев по MgSam

Как предлагается, Я могу представить что-то подобное, чтобы получить полное имя: BindToFullyQualifiedName (nameof (Microsoft) + "." + Nameof (Microsoft.Data) + "." + Имяof (Microsoft.Data.Entities) + "." + Имяof (Microsoft.Data.Entities.EntityObject));

Ответ был

Я думаю TypeOf (EntityObject) .FullName вполне достаточно в вашем случае.

Который завершил обсуждение без дальнейших комментариев по другому способу сделать это.

К сожалению, это означает, что нет никакого имени пользователя и получить полное имя для использования в атрибутах.

Возможно, это конец, и я полагаю, что Microsoft должна изменить свою документацию, чтобы сделать ее более четкой и точной.

+0

Проверьте мой ответ. – GregaMohorko

+0

Я очень благодарен за полезное обсуждение. –

+0

«К сожалению, это означает, что нет никакого имени пользователя и получить полное имя для использования в атрибутах». - Это не совсем так - ваш первый пример с цепочкой + ". + будет работать нормально (просто verbose), поскольку выражение преобразуется в константную строку. – Rob

 Смежные вопросы

  • Нет связанных вопросов^_^