查找具有包含特定属性值的属性的所有类
问题描述:
是否可以根据为该属性赋予的值来查找使用自定义属性标记的类?查找具有包含特定属性值的属性的所有类
基本上,我有看起来像这样的类 -
[MyAttr("CODE")]
public class MyClass() {}
从那里,我得到的所有类(类型) -
var c = Assembly.GetExecutingAssembly().GetTypes().Where
(
t => t.IsClass &&
t.Namespace == (typeof(AbstractParentClass)).Namespace &&
t.IsSubclassOf(typeof(AbstractParentClass))
);
这一切似乎工作。 c
包含所有适当的类。现在我需要从c
获得具有属性MyAttr
和值“CODE”的课程。该值可通过名为Id
的MyAttr上的属性获得。
这是我的尝试 -
var message = from m in c
from a in m.GetCustomAttributes(typeof(MyAttr), false)
where ((MyAttr)a).Id == "CODE"
select m;
这并没有这样的伎俩。所以,真正的问题是如果这甚至是可能的,并且如果需要改变以获得适当的类(并且实例化它)。
答
将Assembly.GetExecutingAssembly()
替换为typeof(AbstractParentClass).Assembly
。
你的代码应该工作。你确定'c'包含你正在寻找的类型吗? – SLaks 2010-08-26 15:58:37
SLaks是正确的,并且代码应该工作。我不知道Assembly.GetExecutingAssembly()是否总是返回你期望的程序集? – 2010-08-26 16:35:22
尝试用'typeof(AbstractParentClass).Assembly'替换'Assembly.GetExecutingAssembly()'。 – SLaks 2010-08-26 17:19:20