我有净反射的问题。这个概念是相当新的给我,我与一些测试用例探索它,看看什么可行,什么不可行。我构造的实例,其中我填充一组菜单动态通过我的类型属性扫描。

基本上,我想找到我的主命名空间每种类型的声明“SomeAttribute”(不不管它是什么,它没有任何成员目前)。我所做的是:

    For Each itemtype As Type In Reflection.Assembly.GetExecutingAssembly().GetTypes
        If itemtype.IsDefined(Type.GetType("SomeAttribute"), False) Then
            'do something with the type
        End If
    Next

此崩溃在启动应用程序 - 它标识了第一类是所有MyApplication这是相当明显不是我想要的。是否有一个正确和恰当的方式来看待所有的“真实”“明智”的类型 - 我已经定义,即类 - 当前组件中的

有帮助吗?

解决方案

它是最有可能因为IsDefined()返回空那Type.GetType("SomeAttribute")失败。尝试添加命名空间属性名称:

Type.GetType("SomeNamespace.SomeAttribute")

其他提示

如何一点LINQ的

var list =  AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).
                        Where(x => x.GetCustomAttributes(typeof(MyAttribute), false).Length > 0);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top