使用反射提取属性名称和值
反射中一个常见任务是从类的属性中检索与属性关联的属性信息。考虑以下示例:
<code class="language-csharp">public class Book { [Author("AuthorName")] public string Name { get; private set; } }</code>
此处,Author
属性应用于 Name
属性。我们的目标是利用反射来获取属性名称和值对(“Author”,“AuthorName”)。
为此,请按照以下步骤操作:
typeof(Book).GetProperties()
获取表示类属性的 PropertyInfo
实例数组。PropertyInfo
,调用 GetCustomAttributes()
来确定是否有任何属性具有 Author
类型。Author
属性,则从 PropertyInfo
中检索属性名称,并从属性中检索属性值。下面提供此类实现的示例:
<code class="language-csharp">public static Dictionary<string, string> GetAuthors() { var dict = new Dictionary<string, string>(); var props = typeof(Book).GetProperties(); foreach (var prop in props) { var attrs = prop.GetCustomAttributes(true); foreach (var attr in attrs) { var authAttr = attr as AuthorAttribute; if (authAttr != null) { var propName = prop.Name; var auth = authAttr.Name; dict.Add(propName, auth); } } } return dict; }</code>
通过调用此函数,您可以获得一个将属性名称映射到作者名称的字典,从而提供与属性关联的属性信息的完整列表。
以上是如何使用反射从类属性中提取属性名称和值?的详细内容。更多信息请关注PHP中文网其他相关文章!