Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 用某些属性标识所有类型_.net_Reflection_Custom Attributes - Fatal编程技术网

.net 用某些属性标识所有类型

.net 用某些属性标识所有类型,.net,reflection,custom-attributes,.net,Reflection,Custom Attributes,我对.Net反射有一个问题。这个概念对我来说是相当新的,我正在用一些测试用例来探索它,看看什么是有效的,什么是无效的。我正在构建一个示例,通过扫描类型的属性,动态填充一组菜单 基本上,我希望在我的主命名空间中找到声明“SomeAttribute”的每个类型(不管它是什么,它目前没有任何成员)。我所做的是: For Each itemtype As Type In Reflection.Assembly.GetExecutingAssembly().GetTypes If

我对.Net反射有一个问题。这个概念对我来说是相当新的,我正在用一些测试用例来探索它,看看什么是有效的,什么是无效的。我正在构建一个示例,通过扫描类型的属性,动态填充一组菜单

基本上,我希望在我的主命名空间中找到声明“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,这显然不是我想要的。是否有一种正确的方法来查找当前程序集中所有“真正的”“合理的”类型,即我定义的类?

来一点Linq怎么样

var list =  AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).
                        Where(x => x.GetCustomAttributes(typeof(MyAttribute), false).Length > 0);

由于
Type.GetType(“SomeAttribute”)
返回null,因此
IsDefined()
很可能失败。尝试将命名空间添加到属性名称:

Type.GetType("SomeNamespace.SomeAttribute")

我刚刚发现了一些东西——Assembly.GetExportedTypes据说可以让类对外部可见。我想知道这是否会更好,但我仍然想确保我没有找错方向。我的应用程序有什么问题?这应该没什么区别。你有什么例外?在
MyApplication
的情况下,您的代码中似乎没有任何东西会崩溃,使用´.Net Attributes´不是更好吗?请在问题中添加一个例外。这是一个无效的操作-原因是我只是不小心标识了类型,而它被作为零传递。马文-我被你的问题弄糊涂了。你说这和我已经在用的有什么不同?谢谢,原因显而易见。感谢所有其他的回复者,因为这都是有用的信息,但从技术上来说,这是答案——根本原因是我自己的粗心。