6
votes

Obtenir des paramètres d'un attribut à l'aide de la réflexion

Ma question est là un moyen de récupérer la liste des paramètres avec sa valeur à l'aide de la réflexion?

Je souhaite utiliser la réflexion pour obtenir la liste des paramètres de la propriétéInfo. P>

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property,  AllowMultiple = true)]
public class Author : Attribute
{
    public Author(string name, int v)
    {
        this.name = name;
        version = v;
    }

    public double version;
    public string name;
}

public class TestClass
{
    [Author("Bill Gates", 2)]
    public TextBox TestPropertyTextBox { get; set; }
}


0 commentaires

4 Réponses :


1
votes

Je suppose par paramètre liste, vous voulez dire une liste de tous les utilisations d'attribut?

Sinon, ce code vous indique comment obtenir un attribut à l'aide de la réflexion sur une classe entière. Mais vous devriez être capable de prendre ce dont vous avez besoin.

Voici une méthode pour trouver tous les attributs d'un certain type, sur n'importe quelle propriété à l'intérieur d'un testclass < Pré> xxx

alors vous pourriez aller: xxx

aussi, vous pouvez souhaiter votre double version publique et et Nom de la chaîne pour être propriétés. Quelque chose comme ceci: xxx

qui permettra la version à partir du constructeur et lisez n'importe où.


4 commentaires

Merci. Mon cas est que cela n'utilise pas la classe statique. Ainsi utiliser l'attribut auteur auteure = (auteur); n'est pas ok. Je souhaite utiliser la réflexion pour obtenir la liste des paramètres de la propriétéInfo.


Pouvez-vous définir la liste des paramètres?


La liste des paramètres est que je peux obtenir ("Bill Gates", 2) en utilisant de manière dynamique la réflexion avec une "auteur" à l'attribut Cast. Parce qu'il y aura beaucoup d'attributs de ce type, certains peuvent ne pas être un attribut auteur.


Eh bien, vous pouvez itérer sur l'attribut et obtenir toutes les propriétés?



4
votes

Utilisation de ce programme xxx

i obtenir cette sortie:

texte alt


0 commentaires

0
votes
string name = author.name;
is not allowed because the field name is not public.  Does it work if you make name public?

2 commentaires

Désolé c'est une faute de frappe, j'ai ajouté le retour du public.


Votre dernière modification révèle votre problème. Utilisez getcustomattributes avec un paramètre de type à filtrer et uniquement sur les attributs qui sont des attributs authentifier ou d'autres utilisent auteure auteur = l'auteur; d'une distribution, pour faire une vérification de type dynamique et ignorer ceux qui reviennent null .



0
votes

J'ai eu le même problème dans l'une de mes applications. C'est ma solution:

Attribute Name        : [Author("Bill Gates", (Int32)2)]
Constructor arguments : "Bill Gates",  (Int32)2


0 commentaires