отражение: частная собственность, как извлечь пользовательский атрибут - PullRequest
0 голосов
/ 25 марта 2011

Привет, можно получить пользовательский атрибут в приватной собственности

   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;

        }
    }

спасибо

1 Ответ

4 голосов
/ 25 марта 2011

Да, это вполне возможно. Код, который у вас есть (хотя и немного бессмысленный, поскольку вам не нужно размышление, поскольку вы работаете в своем собственном типе), довольно близок:

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
    }
}
...