2009-08-21 5 views
1

J'essaie de déterminer le type d'une propriété à laquelle un attribut se rapporte, à partir du constructeur d'attributs. Plus de spécificité Je cherche la classe qui contient la propriété.Attribut C# PropertyType Réflexion

mon constructeur actuel ressemble à ceci:

public IndexedCategoryAttribute(Type DefiningClass, String HeaderText, int Index) 
    { 

     this._definingClass = DefiningClass; 

mais je veux qu'il ressemble à:

public IndexedCategoryAttribute(String HeaderText, int Index) 
    { 

     PropertyInfo Info = ??? 
     this._definingClass = Info.DeclaringType; 

Je crois que cela fournira un code plus sûr pour les utilisateurs de l'attribut depuis à l'heure actuelle, il requiert un 'typeof (MyClass)' dans la définition de l'attribut, ce qui ouvre la posiblité du mauvais type fourni?

Pour plus d'informations, je l'utilise avec la grille de propriétés. Le type est utilisé dans un static Dictionary<Type, Dictionary<String, int>> pour regrouper les catégories dans la classe à laquelle elles se rapportent.

+0

Quelque chose à considérer - Microsoft a opté pour le DataGrid de Xceed pour Visual Studio 2010 lui-même. –

+0

Comment cela est-il lié à la question? –

Répondre

3

Je ne pense pas que les attributs, lorsqu'ils sont instanciés, peuvent connaître le type ou la propriété à laquelle ils sont associés.

La relation va dans l'autre sens:

  • propriétés ont des attributs
  • types ont des attributs
  • méthodes ont des attributs

Les attributs ne sont pas "avoir" types. Lors de la construction de votre grille, vous devez effectuer la numérisation dans la direction opposée à celle que vous avez proposée. Pour chaque type de votre ensemble, vous pouvez réfléchir pour déterminer les attributs attachés au type (ou plonger dans les attributs de la propriété), et si ces attributs sont votre attribut de catégorie, ajoutez-les au dictionnaire.

+0

Merci, j'espérais pouvoir garder tout ce qui concernait les index dans l'Attribut même, mais je peux le faire dans le descripteur de type –

Questions connexes