首页 >后端开发 >C++ >如何使用反射从类属性中提取属性名称和值?

如何使用反射从类属性中提取属性名称和值?

Barbara Streisand
Barbara Streisand原创
2025-01-29 08:24:17139浏览

How Can I Extract Attribute Names and Values from Class Properties Using Reflection?

使用反射提取属性名称和值

反射中一个常见任务是从类的属性中检索与属性关联的属性信息。考虑以下示例:

<code class="language-csharp">public class Book
{
    [Author("AuthorName")]
    public string Name
    {
        get; private set; 
    }
}</code>

此处,Author 属性应用于 Name 属性。我们的目标是利用反射来获取属性名称和值对(“Author”,“AuthorName”)。

为此,请按照以下步骤操作:

  1. 使用 typeof(Book).GetProperties() 获取表示类属性的 PropertyInfo 实例数组。
  2. 对于每个 PropertyInfo,调用 GetCustomAttributes() 来确定是否有任何属性具有 Author 类型。
  3. 如果存在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn