查找具有包含特定属性值的属性的所有类

问题描述:

是否可以根据为该属性赋予的值来查找使用自定义属性标记的类?查找具有包含特定属性值的属性的所有类

基本上,我有看起来像这样的类 -

[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; 

这并没有这样的伎俩。所以,真正的问题是如果这甚至是可能的,并且如果需要改变以获得适当的类(并且实例化它)。

+2

你的代码应该工作。你确定'c'包含你正在寻找的类型吗? – SLaks 2010-08-26 15:58:37

+1

SLaks是正确的,并且代码应该工作。我不知道Assembly.GetExecutingAssembly()是否总是返回你期望的程序集? – 2010-08-26 16:35:22

+1

尝试用'typeof(AbstractParentClass).Assembly'替换'Assembly.GetExecutingAssembly()'。 – SLaks 2010-08-26 17:19:20

Assembly.GetExecutingAssembly()替换为typeof(AbstractParentClass).Assembly