[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
К приему есть следующий класс:
1 2 3 4 5 6 7 8 |
public class Book { [Author("AuthorName")] public string Name { get; private set; } } |
Как получить имя свойства и его атрибута из класса? Можно использовать рефлексию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public static Dictionary<string, string> GetAuthors() { Dictionary<string, string> _dict = new Dictionary<string, string>(); PropertyInfo[] props = typeof(Book).GetProperties(); foreach (PropertyInfo prop in props) { object[] attrs = prop.GetCustomAttributes(true); foreach (object attr in attrs) { AuthorAttribute authAttr = attr as AuthorAttribute; if (authAttr != null) { string propName = prop.Name; string auth = authAttr.Name; _dict.Add(propName, auth); } } } return _dict; } |
Используйте typeof(Book).GetProperties(), чтобы получить массив экземпляров PropertyInfo. Затем используйте GetCustomAttributes() для каждого PropertyInfo, чтобы узнать, есть ли среди них тип Author Attribute. Если да, вы можете получить имя свойства из информации о свойстве и значения атрибута из атрибута.
Что-то в этом роде для сканирования типа на наличие свойств, имеющих определенный тип атрибута, и возврата данных в словаре (обратите внимание, что это можно сделать более динамичным, передавая типы в процедуру).