Отримати всі властивості, які позначили певний атрибут


80

У мене там клас і властивості. Деякі властивості можна позначити атрибутом (це моя LocalizedDisplayNameспадщина від DisplayNameAttribute). Це метод отримання всіх властивостей класу:

private void FillAttribute()
{
    Type type = typeof (NormDoc);
    PropertyInfo[] propertyInfos = type.GetProperties();
    foreach (var propertyInfo in propertyInfos)
    {
        ...
    }
}

Я хочу додати властивості класу у вікно списку, яке позначено LocalizedDisplayNameта відображає значення атрибута у списку. Як я можу це зробити?

EDIT
Це LocalizedDisplayNameAttribute:

public class LocalizedDisplayNameAttribute : DisplayNameAttribute
    {
        public LocalizedDisplayNameAttribute(string resourceId)
            : base(GetMessageFromResource(resourceId))
        { }

        private static string GetMessageFromResource(string resourceId)
        {
            var test =Thread.CurrentThread.CurrentCulture;
            ResourceManager manager = new ResourceManager("EArchive.Data.Resources.DataResource", Assembly.GetExecutingAssembly());
            return manager.GetString(resourceId);
        }
    }  

Я хочу отримати рядок із файлу ресурсу. Дякую.


Що таке "значення атрибута"? Атрибути - це класи, і вони можуть мати багато "значень" (властивості / поля). Може, ви говорите про результат від ToString()? Чи можете ви відредагувати своє запитання, щоб додати код для користувацьких атрибутів, які ви застосовуєте, і вказати, які дані ви хочете від нього?
Merlyn Morgan-Graham

Відповіді:


132

Це, мабуть, найпростіший у використанні IsDefined:

var properties = type.GetProperties()
    .Where(prop => prop.IsDefined(typeof(LocalizedDisplayNameAttribute), false));

Щоб отримати самі значення, ви б використали:

var attributes = (LocalizedDisplayNameAttribute[]) 
      prop.GetCustomAttributes(typeof(LocalizedDisplayNameAttribute), false);

7
+1; Nit-pick: Я б вказав IEnumerable<PropertyInfo>тут :) Корисно, якщо людина, яка бачить цю відповідь, не знайома з Linq або Reflections.
Мерлін Морган-Грем
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.