2010-08-26 14 views
6

È possibile trovare una classe contrassegnata con un attributo personalizzato in base a un valore assegnato a tale attributo?Trova tutte le classi con un attributo contenente un valore di proprietà specifico

Fondamentalmente, io sono classi che assomigliano a questo -

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

Da lì che sto ricevendo tutte le classi (Tipi) -

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

Ciò appare tanto al lavoro. c contiene tutte le classi appropriate. Ora ho bisogno di ottenere la classe da c che ha attributo MyAttr e il valore "CODICE". Il valore è disponibile tramite una proprietà su MyAttr, denominata Id.

Questo è stato il mio tentativo -

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

che non ha fatto il trucco. Quindi, la vera domanda è se questo è anche possibile e in tal caso ciò che deve essere cambiato per ottenere la classe appropriata (e istanziarlo).

+2

Il tuo codice dovrebbe funzionare. Sei sicuro che 'c' contiene il tipo che stai cercando? – SLaks

+1

SLaks è corretto e il codice dovrebbe funzionare. Mi chiedo se Assembly.GetExecutingAssembly() restituisca sempre l'assembly che ci si aspetta? –

+1

Provare a sostituire 'Assembly.GetExecutingAssembly()' con 'typeof (AbstractParentClass) .Assembly'. – SLaks

risposta

3

Sostituire Assembly.GetExecutingAssembly() con typeof(AbstractParentClass).Assembly.

Problemi correlati