Как получить значения атрибута переменной? - PullRequest
3 голосов
/ 16 августа 2011

Моя цель - получить атрибут свойств класса и его значения.

Например, если у меня есть атрибут «Bindable», чтобы проверить, является ли свойство привязываемым:

public class Bindable : Attribute
{
    public bool IsBindable { get; set; }
}

И яесть класс Person:

public class Person
{
    [Bindable(IsBindable = true)]
    public string FirstName { get; set; }

    [Bindable(IsBindable = false)]
    public string LastName { get; set; } 
}

Как получить значения атрибутов 'Bindable' для FirstName и LastName?

    public void Bind()
    {
        Person p = new Person();

        if (FirstName property is Bindable)
            p.FirstName = "";
        if (LastName property is Bindable)
            p.LastName = "";
    }

Спасибо.

Ответы [ 2 ]

6 голосов
/ 16 августа 2011

Экземпляры не имеют отдельных атрибутов - вы должны запросить тип для его членов (например, с Type.GetProperties) и спросить этих членовдля их атрибутов (например, PropertyInfo.GetCustomAttributes).

РЕДАКТИРОВАТЬ: В соответствии с комментариями, есть учебник по MSDN об атрибутах.

2 голосов
/ 16 августа 2011

Вы можете попробовать следующим образом:

     public class Bindable : Attribute
        {
            public bool IsBindable { get; set; }
        }

        public class Person
        {
            [Bindable(IsBindable = true)]
            public string FirstName { get; set; }

            [Bindable(IsBindable = false)]
            public string LastName { get; set; }
        }

        public class Test
        {
            public void Bind()
            {
                Person p = new Person();

                foreach (PropertyInfo property in p.GetType().GetProperties())
                {

                   try
                   {
                       Bindable _Attribute = (Bindable)property.GetCustomAttributes(typeof(Bindable), false).First();

                       if (_Attribute.IsBindable)
                       {
                            //TODO
                       }
                    }
                    catch (Exception) { }
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...