3 votes

.Net : Comment obtenir des attributs personnalisés à l'aide de TypeDescriptor.GetProperties ?

J'ai créé mon propre attribut pour décorer mon objet.

 [AttributeUsage(AttributeTargets.All)]
    public class MyCustomAttribute : System.Attribute { }

Lorsque j'essaie d'utiliser TypeDescriptor.GetProperties en passant dans mon attribut personnalisé, il ne renvoie rien, même si le type est décoré avec l'attribut.

  var props = TypeDescriptor.GetProperties(
              type, 
              new[] { new Attributes.FlatLoopValueInjection()});

Comment faire pour que TypeDescriptor.GetProperties reconnaisse mes types personnalisés ?

8voto

DmitryG Points 10735

En Type.GetProperties(type, Attributes[]) retourne uniquement la collection de propriétés pour un type de composant spécifié en utilisant un tableau d'attributs spécifié comme filtre.
Etes-vous sûr que le type de cible a une propriété marquée avec vos attributs personnalisés comme ça ?

//...
    var props = TypeDescriptor.GetProperties(typeof(Person), new Attribute[] { new NoteAttribute() });
    PropertyDescriptor nameProperty = props["Name"];
}
//...
class Person {
    [Note]
    public string Name { get; set; }
}
//...
class NoteAttribute : Attribute {
/* implementation */
}

0voto

Jason Points 8799

mis à jour pour obtenir l'attribut de propriété

ce code a été copié et collé à partir de MSDN qui a été le premier résultat de la recherche google ". obtenir la réflexion d'un attribut personnalisé c# '

using System;

public class ExampleAttribute : Attribute
{
    private string stringVal;

    public ExampleAttribute()
    {
        stringVal = "This is the default string.";
    }

    public string StringValue
    {
        get { return stringVal; }
        set { stringVal = value; }
    }
}

[Example(StringValue="This is a string.")]
class Class1
{
    public static void Main()
    {
        PropertyInfo propertyInfo = typeof (Class1).GetProperties().Where(p => p.Name == "Foo").FirstOrDefault();
        foreach (object attrib in propertyInfo.GetCustomAttributes(true))
        {
            Console.WriteLine(attrib);
        }
    }

    [Example(StringValue = "property attribute")]
    public string Foo {get;set;}
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X