È 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).
Il tuo codice dovrebbe funzionare. Sei sicuro che 'c' contiene il tipo che stai cercando? – SLaks
SLaks è corretto e il codice dovrebbe funzionare. Mi chiedo se Assembly.GetExecutingAssembly() restituisca sempre l'assembly che ci si aspetta? –
Provare a sostituire 'Assembly.GetExecutingAssembly()' con 'typeof (AbstractParentClass) .Assembly'. – SLaks