首页 >后端开发 >C++ >如何使用.NET反射检索属性的属性名称和值?

如何使用.NET反射检索属性的属性名称和值?

Susan Sarandon
Susan Sarandon原创
2025-01-29 07:48:08742浏览

How to Retrieve Attribute Name and Value for Properties using .NET Reflection?

使用.NET反射获取属性名称和值的技巧

本文探讨如何使用.NET反射机制提取属性的名称-值对。我们以一个名为Book的类为例,其Name属性带有Author特性:

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

问题: 给定一个类型,如何使用反射获取每个属性的特性名称及其关联的值?

解决方案:

使用反射访问属性特性,请按照以下步骤操作:

  1. 使用typeof(Book).GetProperties()获取一个PropertyInfo实例数组,这些实例代表该类型的全部属性。
  2. 遍历每个PropertyInfo,并使用GetCustomAttributes()检索应用于该属性的自定义特性数组。
  3. 筛选返回的特性,以识别所需类型的特性(例如,此处的AuthorAttribute)。
  4. 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>

通过利用反射,我们可以动态地检查属性并提取自定义特性数据,从而深入了解与代码关联的元数据。

以上是如何使用.NET反射检索属性的属性名称和值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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