2016-04-16 18 views
2

ich von Namespace alle Klassen erhalten möchten, so habe ich diesen Code verwendet:Holen Sie sich alle Klassen von Namespace und die Arbeit an ihren Eigenschaften

var theList = Assembly.GetExecutingAssembly().GetTypes() 
        .Where(t => t.Namespace == myNameSpace) 
        .ToList(); 

Es funktioniert, aber wenn ich durch diese Liste bin Looping, möchte ich Erstellen Sie eine Instanz oder einen Aufrufkonstruktor für jede Klasse in der Listenliste und rufen Sie zum Beispiel ihre Methoden oder Eigenschaften auf.

Ofc dieser Code funktioniert nicht, aber das ist mein Ziel.

foreach (Type t in theList) 
     { 
      description += t.Description; 
     } 

@Edit ich getan habe:

 var theList = Assembly.GetExecutingAssembly().GetTypes() 
       .Where(t => t.Namespace == myNameSpace) 
       .ToList(); 

     foreach (Type t in theList) 
     { 
      Command instance = (Command)Activator.CreateInstance(t); 
      result += Environment.NewLine + instance.Name + " - " + instance.Description; 
     } 
+0

Ich weiß nicht, wie verketten Beschreibungen (ich das nicht glaube, ist Mitglied in erster Linie) entspricht "Instanzen und Aufrufmethoden erstellen". Könntest Du das erläutern? –

+2

siehe 'Activator.CreateInstance' – Jonesopolis

+0

Beschreibung ist nur String-Eigenschaft. Ich habe das zum Beispiel hinzugefügt. Ich meine, ich möchte mit Klasseneigenschaften und Methoden arbeiten, die sich in der Liste Liste befinden. – Porqqq

Antwort

0

Um eine Instanz einer Klasse erstellen Sie Activator.CreateInstance() aufrufen können.

Thereis auch eine schöne Erweiterung Methode, die ich verwende, um Eigenschaften und Werte von Objekten zu erhalten:

/// <summary> 
///  Gets all public properties of an object and and puts them into dictionary. 
/// </summary> 
public static IDictionary<string, object> ToDictionary(this object instance) 
{ 
    if (instance == null) 
     throw new NullReferenceException(); 

    // if an object is dynamic it will convert to IDictionary<string, object> 
    var result = instance as IDictionary<string, object>; 
    if (result != null) 
     return result; 

    return instance.GetType() 
     .GetProperties() 
     .ToDictionary(x => x.Name, x => x.GetValue(instance)); 
}