如何列出.NET程序集中的所有委托

时间:2017-03-03 09:22:27

标签: .net delegates .net-assembly

要获取特定.NET程序集和给定命名空间中定义的类的列表,我会执行以下操作:

foreach (var type in assembly.GetTypes()
    .Where(t => t.IsClass && t.Namespace == @namespace))
{
    //process type
}

这将返回类和委托,因此如果存在像

这样的委托声明
public delegate void MyDelegate()

MyDelegate也由上述循环处理。

我想只通过委托类型循环。 我希望Type类具有IsDelegate属性,但没有。

我看到代表委托的类型有基类型System.MulticastDelegate - 它是正确的过滤器还是我遗漏了什么?

1 个答案:

答案 0 :(得分:0)

foreach (var type in assembly.GetTypes()
        .Where(t => t.IsClass && t.Namespace == @namespace && t.IsDelegate()))
{                
    //process delegate type
}

public static class TypeExtensions
{
    public static bool IsDelegate(this Type type)
    {
        return type.BaseType == typeof(MulticastDelegate);
    }
}