2016-05-20 29 views
1

Ich habe zwei Klasse:Anzeige vollständigen Namen aller Eigenschaften eines Objekts

public class Customer 
{ 
    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    public DateTime Date { get; set; } 

    public bool isActif { get; set; } 

    public Quantity Quantity { get; set; } 
} 

public class Quantity 
{ 
    public string Color { get; set; } 

    public int Number { get; set; } 
} 

Und eine Methode, die alle Eigenschaften einer Instanz von meiner Klasse Kunden mit Reflexion und Rekursion anzuzeigen:

public static void DisplayProperties(object objectA) 
{ 
    if (objectA != null) 
    { 
     Type objectType; 

     objectType = objectA.GetType(); 

     foreach (PropertyInfo propertyInfo in objectType.GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(x => x.CanRead)) 
     { 
      object valueA = propertyInfo.GetValue(objectA, null); 

      if (typeof(IComparable).IsAssignableFrom(propertyInfo.PropertyType) || propertyInfo.PropertyType.IsPrimitive || propertyInfo.PropertyType.IsValueType) 
      { 
       Console.WriteLine(propertyInfo.ReflectedType.Name + "." + propertyInfo.Name); 
      } 
      else 
       DisplayProperties(valueA); 
     } 
    } 
} 

das Ergebnis:

Customer.FirstName 
Customer.LastName 
Customer.Date 
Customer.isActif 
Quantity.Color 
Quantity.Number 

Aber ich mag den vollständigen Namen des Eigentums erholen wie die

Customer.FirstName 
Customer.LastName 
Customer.Date 
Customer.isActif 
Customer.Quantity.Color 
Customer.Quantity.Number 

Wie vorgehen?

Antwort

0

Änderung Ihrer DisplayProperties Methode zu diesem

public static void DisplayProperties(object objectA, string objName="") 
{ 
    if (objectA != null) 
    { 
     Type objectType; 

     objectType = objectA.GetType(); 

     foreach (PropertyInfo propertyInfo in objectType.GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(x => x.CanRead)) 
     { 
      object valueA = propertyInfo.GetValue(objectA, null); 

      if (typeof(IComparable).IsAssignableFrom(propertyInfo.PropertyType) || propertyInfo.PropertyType.IsPrimitive || propertyInfo.PropertyType.IsValueType) 
      { 
       Console.WriteLine(objName + (objName==""? "" : ".") + propertyInfo.ReflectedType.Name + "." + propertyInfo.Name); 
      } 
      else 
       DisplayProperties(valueA, objName + (objName == "" ? "" : ".") + objectType.Name); 
     } 
    } 
} 
+0

Danke !! Es ist Arbeit –

0

Ein guter Ansatz wird sein, den Pfad bei jedem Aufruf für DisplayProperties zu übergeben.

Ändern Sie die Methodensignatur:

public static void DisplayProperties(object objectA, string path = "") 

Ändern der Druckverfahren

Console.WriteLine("{0}{1}.{2}", path, propertyInfo.ReflectedType.Name, propertyInfo.Name); 

Ändern der rekursiven Rufmethode

DisplayProperties(valueA, objectA.GetType().Name + "."); 
Verwandte Themen