Я работаю над .NET 2.0. К сожалению, я не смог использовать более новую версию. Я пытаюсь написать свой собственный атрибут, предоставляющий простое значение.

[AttributeUsage(AttributeTargets.All)]
public class testAttribute : Attribute
{
    int b;
    public testAttribute(int a)
    {
        b = a;
        Console.WriteLine("Creating Attribute");
    }
    public testAttribute()
    {
        b = 5;
        Console.WriteLine("Creating Attribute");
    }
}

public class MyTestClass
{
    [testAttribute]
    public MyTestClass()
    {
        int a = 0;
        Console.WriteLine("creating serializer 2");
    }

    [testAttribute(2)]
    public void foo(){
        //Type t = this.GetType();
        //testAttribute[] t2 = (testAttribute[])t.GetCustomAttributes(typeof(testAttribute), true);
        Console.WriteLine("calling foo");

        object[] attr = typeof(MyTestClass).GetCustomAttributes(true);
        int a = 5;
    }
}

Но, похоже, это не работает. Я понял этот пример из msdn [http: //msdn.microsoft.com/en-us/library/a4a92379%28v=vs.80%29.aspx], и для меня это выглядит очень похоже.

Я также обнаружил следующее: Атрибут метода не работает, но это не совсем мой проблема я думаю. Как видите, я испробовал рекомендацию BrokenGlass, но у меня есть массив с размером 0, что означает отсутствие атрибута.

Какие-либо предложения? С уважением Чомп

1
user2196543 21 Мар 2013 в 23:05
Что значит "не работает"?
 – 
dtb
21 Мар 2013 в 23:06

1 ответ

Лучший ответ

Вы должны вызывать GetCustomAttributes для методов, а не для типа.

object[] attr = typeof(MyTestClass).GetMethod("foo").GetCustomAttributes(true);
2
Daniel A. White 21 Мар 2013 в 23:12
2
Рассмотрите возможность использования GetConstructor() для первого. Также имена методов чувствительны к регистру.
 – 
Martin Lottering
21 Мар 2013 в 23:10