«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу динамически получить значения атрибутов из класса во время выполнения?

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

Опубликовано в 2025-02-07
Просматривать:563

How Can I Dynamically Retrieve Attribute Values from a Class at Runtime?

атрибуты поиска выполнения

В этой статье вводит общий метод для динамического доступа и извлечения значений свойств класса.

]

Используйте Специальный метод

]

определить общий метод, который принимает параметры типа:

]
public string GetDomainName()
внутри метода:

]
    ]
  • использовать

    typeof (t) .getCustomattributes для получения пользовательских атрибутов: ]

      var dnAttribute = typeof(T).GetCustomAttributes(
        typeof(DomainNameAttribute), true
      ).FirstOrDefault() as DomainNameAttribute;
    ]
  • ]
  • , если свойство существует, его значение возвращается:

    ]

      if (dnAttribute != null)
      {
        return dnAttribute.Name;
      }
    ]
  • ]
  • в противном случае, вернуть null:

    ]

      return null;
    ]
  • ]
метод расширения утилиты

для более широкой применимости, обобщайте этот метод для обработки любого атрибута:

]

public static class AttributeExtensions
{
    public static TValue GetAttributeValue(
        this Type type, 
        Func valueSelector) 
        where TAttribute : Attribute
}
внутри метода расширения:

]

]
    ]
  • Получить пользовательские свойства:

    ]

      var att = type.GetCustomAttributes(
        typeof(TAttribute), true
      ).FirstOrDefault() as TAttribute;
    ]
  • ]
  • , если атрибут существует, используйте предоставленную

    valuesElector для извлечения требуемого значения: ]]]

      if (att != null)
      {
        return valueSelector(att);
      }
    ]
  • ]
  • в противном случае вернуть значение по умолчанию этого типа:

    ]

      return default(TValue);
    ]
  • ]
пример использования

]

]
    retive
  • domainname атрибут myclass : ]
  • ]
string name = typeof(MyClass).GetDomainName();
]
    извлечь любое значение атрибута
  • myclass , используя метод расширения: ]
  • ]
 string name = typeof (myclass)
    .GetAttributeValue  ((domainNamAttribute dna) => dna.name);  ]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3