2010-07-08 5 views
0

I ont une grande classe avec de nombreux sous-classes imbriquées de différents types comme suit:Reflétant types de propriétés spécifiques de sous-classes

class BigFooClass 
{ 
    // Classes 
    Foo InnerFoo {get; set;} 
    Bar InnerBar {get; set;} 
    Oof InnerOof {get; set;} 
    Rab InnerRab {get; set;} 

    // Simple Properties 
    Decimal OuterDecimal {get; set;} 
    Long OuterLong {get; set;} 
{ 

Chacune de ces classes internes sont définies comme suit:

class Foo 
{ 
    Decimal DecimalProp {get; set;} 
    Long LongProp {get; set;} 
} 
class Bar 
{ 
    Decimal Decimal Prop {get; set;} 
    Long LongProp {get; set;} 

} etc... 

Je veux pour obtenir une liste de toutes les propriétés décimales ou longues avec leurs types de conteneur comme suit:

BigFooClass.OuterDecimal est le type de Décimal

BigFooClass.OuterLong est le type de Long

Foo.OuterDecimal est le type de décimal

Foo.OuterLong est le type de Long

Bar.OuterDecimal est le type de décimal

Bar.OuterLong est le type de Long

Je peux arriver au premier niveau mais ne peux pas trouver comment refléter le type d'un PropertyInfo, ce qui n'est peut-être pas la bonne façon de le faire.

Quelqu'un peut-il me montrer comment le faire s'il vous plaît?

Brian

Répondre

0

Une fois que vous avez le premier niveau en tant que PropertyInfo, vous aurez besoin d'un autre niveau récursif vers le bas et vérifier les propriétés au sein de ce type. Vous pouvez le faire en regardant le membre PropertyInfo.PropertyType, puis en utilisant ce type pour appeler GetProperty/GetProperties et récupérer les propriétés de "deuxième niveau".

+0

Merci Reed. En fait, l'information manquante pour moi était l'utilisation de PropertyType pour obtenir le type de la classe de niveau inférieur pour faire l'itération sur les propriétés. J'avais essayé d'obtenir les propriétés de PropertyInfo! – Redeemed1

+0

@ Redeemed1: Heureux qui a aidé. Lorsque vous utilisez la réflexion, vous devez presque toujours travailler à partir d'un System.Type. –

1

simple:

PropertyInfo pi = // get your property info here 

pi.PropertyType; // This is what you're looking for. (Type) 
+0

B, merci beaucoup pour cela. @Reed Copsey a donné un peu plus d'informations dans sa réponse, donc je vais lui donner la réponse mais je vais voter cette réponse pour vous. – Redeemed1

Questions connexes