【问题标题】:How to list all delegates from a .NET assembly如何列出 .NET 程序集中的所有委托
【发布时间】:2017-03-03 09:22:27
【问题描述】:

要获取特定 .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 - 它是正确的过滤器还是我遗漏了什么?

【问题讨论】:

  • 检查类型是否可分配给Delegate(或MulticastDelegate,在现实世界中没有区别)

标签: .net delegates .net-assembly


【解决方案1】:
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);
    }
}

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    相关资源
    最近更新 更多