¿Es posible encontrar una clase etiquetada con un atributo personalizado basado en un valor dado a ese atributo?Buscar todas las clases con un atributo que contiene un valor de propiedad específico
Básicamente, tengo clases que se ven así -
[MyAttr("CODE")]
public class MyClass() {}
De allí que estoy recibiendo todas las clases (tipos) -
var c = Assembly.GetExecutingAssembly().GetTypes().Where
(
t => t.IsClass &&
t.Namespace == (typeof(AbstractParentClass)).Namespace &&
t.IsSubclassOf(typeof(AbstractParentClass))
);
Todo esto parece funcionar. c
contiene todas las clases apropiadas. Ahora necesito obtener la clase de c
que tiene el atributo MyAttr
y el valor "CODE". El valor está disponible a través de una propiedad en MyAttr llamada Id
.
Este fue mi intento -
var message = from m in c
from a in m.GetCustomAttributes(typeof(MyAttr), false)
where ((MyAttr)a).Id == "CODE"
select m;
que no hizo el truco. Entonces, la verdadera pregunta es si esto es posible, y si es así, qué necesita ser cambiado para obtener la clase apropiada (y crear una instancia).
Tu código debería funcionar. ¿Estás seguro de que 'c' contiene el tipo que estás buscando? – SLaks
SLaks es correcto y el código debería funcionar. Me pregunto si Assembly.GetExecutingAssembly() siempre devuelve el ensamblado que esperaba. –
Intente reemplazar 'Assembly.GetExecutingAssembly()' con 'typeof (AbstractParentClass) .Assembly'. – SLaks