反射:私有属性如何提取自定义属性

发布于 2024-10-26 07:11:25 字数 886 浏览 3 评论 0原文

您好,可以在私有财产中检索自定义属性,

   public class TestAttr
    {
        [SaveInState]
        protected string testPrivate { get { return "test private"; }  }
        [SaveInState]
        public string testPublic { get{ return "test public"; }}

        public IDictionary<string, object> dumpVars()
        {

            IDictionary<string, object> dict = new Dictionary<string, object>();

            Type ownerClassType = this.GetType();


            foreach (var mi in ownerClassType.GetProperties(BindingFlags.NonPublic))
            {

                var varAttrib = Attribute.GetCustomAttribute(mi, typeof(SaveInStateAttribute));
                if (varAttrib != null)
                {
                    dict.Add(mi.Name, mi.GetValue(this, null));
                }
            }

            return dict;

        }
    }

谢谢

Hi it's possible to retrieve custom attribute in private property

   public class TestAttr
    {
        [SaveInState]
        protected string testPrivate { get { return "test private"; }  }
        [SaveInState]
        public string testPublic { get{ return "test public"; }}

        public IDictionary<string, object> dumpVars()
        {

            IDictionary<string, object> dict = new Dictionary<string, object>();

            Type ownerClassType = this.GetType();


            foreach (var mi in ownerClassType.GetProperties(BindingFlags.NonPublic))
            {

                var varAttrib = Attribute.GetCustomAttribute(mi, typeof(SaveInStateAttribute));
                if (varAttrib != null)
                {
                    dict.Add(mi.Name, mi.GetValue(this, null));
                }
            }

            return dict;

        }
    }

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

や莫失莫忘 2024-11-02 07:11:25

是的,这是完全可能的。您拥有的代码(虽然有点毫无意义,因为您在自己的类型中工作,所以不需要反射)非常接近:

var type = this.GetType();
foreach(var prop in 
    type.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic))
{
    var attr = prop.GetCustomAttributes(typeof(SaveInStateAttribute), true);

    if(attr.Length > 0)
    {
        // Add the attributes to your collection
    }
}

Yes, it is perfectly possible. The code you have (while a little pointless since you don't need reflection since you're working in your own type) is pretty close:

var type = this.GetType();
foreach(var prop in 
    type.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic))
{
    var attr = prop.GetCustomAttributes(typeof(SaveInStateAttribute), true);

    if(attr.Length > 0)
    {
        // Add the attributes to your collection
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文