C # Получить информацию о члене для цели пользовательского атрибута - PullRequest
2 голосов
/ 29 января 2011

Учитывая пользовательский атрибут, я хочу получить имя его цели:

public class Example
{
    [Woop] ////// basically I want to get "Size" datamember name from the attribute
    public float Size;
}

public class Tester
{
    public static void Main()
    {
        Type type = typeof(Example);
        object[] attributes = type.GetCustomAttributes(typeof(WoopAttribute), false);

        foreach (var attribute in attributes)
        {
            // I have the attribute, but what is the name of it's target? (Example.Size)
            attribute.GetTargetName(); //??
        }
    }
}

Надеюсь, это ясно!

1 Ответ

6 голосов
/ 29 января 2011

сделать наоборот:

итерация

 MemberInfo[] members = type.GetMembers();

и запрос

 Object[] myAttributes = members[i].GetCustomAttributes(true);

или

 foreach(MemberInfo member in type.GetMembers()) {
     Object[] myAttributes = member.GetCustomAttributes(typeof(WoopAttribute),true);
     if(myAttributes.Length > 0)
     {
        MemberInfo woopmember = member; //<--- gotcha
     }
 }

но с Linq гораздо приятнее:

var members = from member in type.GetMembers()
    from attribute in member.GetCustomAttributes(typeof(WoopAttribute),true)
    select member;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...