2016-05-05 20 views
1

EDIT Es tut mir leid, meine Frage war nicht klar. Ich möchte der Liste nicht nur den Eigenschaftsnamen, sondern auch seinen Wert hinzufügenC# durch Klasseneigenschaften durchlaufen und zu bestimmten Typen hinzufügen

Ich möchte alle Eigenschaften einer Klasse durchlaufen und alle Eigenschaften eines bestimmten Typs finden und sie zu einer Liste hinzufügen. Der Code, den ich verwende, um zu iterieren ist:

List<CustomAttribute> attributes = new List<CustomAttribute>(); 
PropertyInfo[] properties = typeof(CustomClass).GetProperties(); 

foreach (PropertyInfo property in properties) 
{ 
    if (property.PropertyType == typeof(CustomAttribute)) 
    { 
     //here I want to add property to list 
    } 
} 

Irgendwelche Ideen?

Dank

+0

tun Sie Eigenschaften bestimmter hinzufügen möchten Art? –

+0

Ja ich möchte nur eine bestimmte Art von Eigenschaften in meiner Liste –

+0

Ist 'CustomAttribute' ein CustomAttribute oder nur ein normaler Typ? – thehennyy

Antwort

1
public static List<PropertyInfo> PropertiesOfType<T>(this Type type) => 
    type.GetProperties().Where(p => p.PropertyType == typeof(T)).ToList(); 

Und Sie haben es wie folgt verwenden:

var properties = typeof(CustomClass).PropertiesOfType<CustomAttribute>(); 

Wenn das, was Sie die Werte brauchen, sind der Eigenschaften des Typs T in einer gegebenen Instanz dann könnte man tun Sie folgendes:

public static List<T> PropertyValuesOfType<T>(this object o) => 
     o.GetType().GetProperties().Where(p => p.PropertyType == typeof(T)).Select(p => (T)p.GetValue(o)).ToList(); 

Und würden Sie es verwenden, wie:

CustomClass myInstance = ... 
var porpertyValues = myInstance.GetPropertyValuesOfType<CustomAttribute>(); 

Beachten Sie, dass dies nur gibt Ihnen die Idee, müssen Sie mit Eigenschaften ohne Getter wenn Umgang bewerten benötigt wird.

Und last but not least, wenn Sie die Werte und die Eigenschaftsnamen benötigen, dann können Sie eine List von Tupeln aufzubauen, die Informationen zu speichern:

public static List<Tuple<string, T>> PropertiesOfType<T>(this object o) => 
     o.GetType().GetProperties().Where(p => p.PropertyType == typeof(T)).Select(p => new Tuple<string, T>(p.Name, (T)p.GetValue(o))).ToList(); 
Verwandte Themen