[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на 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. Якщо так, ви можете отримати ім’я властивості з інформації про властивість і значення атрибута з атрибута.
Щось на кшталт сканування типу на наявність властивостей, що мають певний тип атрибута, і повернення даних у словнику (зверніть увагу, що це можна зробити більш динамічним, передаючи типи в процедуру).