@bobrikov_nt

Как выбрать значения определенного типа атрибута из пространства имён?

Есть задумка по автоматическому формированию двухуровневого меню программы. Есть классы (таблицы) на entity framwork, кастомные атрибуты DisplayName и GroupName. Для первоначального построения необходимо выловить уникальные значения атрибута GroupName, но никак не могу понять как это сделать
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 2
WarFollowsMe
@WarFollowsMe
попробуйте Reflection.
foreach (var property in typeof(MyClassFromEntity).GetProperties())
{
    foreach (var attribute in property.GetCustomAttributes(true))
    {
        if(attribute is DisplayNameAttribute)
        {
            var displayNameAttribute = attribute as DisplayNameAttribute;
            var displayName = displayNameAttribute.Name;
        }
        else if(attribute is GroupNameAttribute)
        {
            var groupNameAttribute = attribute as GroupNameAttribute;
            var groupName = groupNameAttribute.Name;
        }
    }
}
Ответ написан
Комментировать
@bobrikov_nt Автор вопроса
Не совсем так, добил немного иначе, но все время забывал про выражение "as GroupName", из-за чего не мог на прямую получить значение Value данного атрибута.
Вот что в итоге вышло:
var MenuGroups = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.Namespace == @"ACS_ITS.Model.Tables").Select(t => t.GetCustomAttribute(typeof(GroupName)) as GroupName).GroupBy(t => t.Value);
                                                                  
foreach(var Group in MenuGroups)
{
      ToolStripItem Item = new ToolStripMenuItem(Group.Key);
      AppMenu.Items.Add(Item);        
}

Это только группы, но думаю по аналогии в эти группы будут уже подъезжать и сами пункты группы меню
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы