2010-08-26 3 views
6

Ist es möglich, eine Klasse zu finden, die mit einem benutzerdefinierten Attribut basierend auf einem Wert versehen ist, der diesem Attribut zugewiesen wurde?Suchen Sie alle Klassen mit einem Attribut, das einen bestimmten Eigenschaftswert enthält

Grundsätzlich habe ich Klassen, die wie folgt aussehen -

[MyAttr("CODE")] 
public class MyClass() {} 

Von dort erhalte ich alle Klassen (Typen) -

var c = Assembly.GetExecutingAssembly().GetTypes().Where 
         (
          t => t.IsClass && 
          t.Namespace == (typeof(AbstractParentClass)).Namespace && 
          t.IsSubclassOf(typeof(AbstractParentClass)) 
         ); 

Das alles scheint zu funktionieren. c enthält alle geeigneten Klassen. Jetzt muss ich die Klasse von c, die Attribut MyAttr und den Wert "CODE" hat. Der Wert ist über eine Eigenschaft in MyAttr mit der Bezeichnung Id verfügbar.

Dies war mein Versuch -

var message = from m in c 
        from a in m.GetCustomAttributes(typeof(MyAttr), false) 
        where ((MyAttr)a).Id == "CODE" 
       select m; 

, die nicht den Trick zu tun haben. Die eigentliche Frage ist also, ob dies überhaupt möglich ist und wenn ja, was geändert werden muss, um die entsprechende Klasse zu erhalten (und instanziieren).

+2

Ihr Code sollte funktionieren. Sind Sie sicher, dass 'c' den gesuchten Typ enthält? – SLaks

+1

SLaks ist korrekt, und der Code sollte funktionieren. Ich frage mich, ob Assembly.GetExecutingAssembly() immer die Assembly zurückgibt, die Sie erwarten? –

+1

Ersetzen Sie 'Assembly.GetExecutingAssembly()' durch 'typeof (AbstractParentClass) .Assembly'. – SLaks

Antwort

3

Ersetzen Sie Assembly.GetExecutingAssembly() durch typeof(AbstractParentClass).Assembly.

Verwandte Themen