如何使用反射来查询程序集的元数据 (LINQ) (Visual Basic)

下面的示例演示了如何将 LINQ 与反射配合使用以检索有关与指定搜索条件匹配的方法的特定元数据。 在这种情况下,该查询将在返回数组等可枚举类型的程序集中查找所有方法的名称。

示例

Imports System.Linq
Imports System.Reflection  

Module Module1  
    Sub Main()  
        Dim asmbly As Assembly =
            Assembly.Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken= b77a5c561934e089")  
  
        Dim pubTypesQuery = From type In asmbly.GetTypes()
                            Where type.IsPublic
                            From method In type.GetMethods()
                            Where method.ReturnType.IsArray = True
                            Let name = method.ToString()
                            Let typeName = type.ToString()
                            Group name By typeName Into methodNames = Group  
  
        Console.WriteLine("Getting ready to iterate")  
        For Each item In pubTypesQuery  
            Console.WriteLine(item.methodNames)  
  
            For Each type In item.methodNames  
                Console.WriteLine(" " & type)  
            Next  
        Next  
        Console.WriteLine("Press any key to exit... ")  
        Console.ReadKey()  
    End Sub  
End Module  

该示例使用 Assembly.GetTypes 方法返回指定程序集中的类型的数组。 将应用 Where 字句筛选器,以便仅返回公共类型。 对于每个公共类型,子查询使用从 Type.GetMethods 调用返回的 MethodInfo 数组生成。 筛选这些结果,以仅返回其返回类型为数组或实现 IEnumerable<T> 的其他类型的方法。 最后,通过使用类型名称作为键来对这些结果进行分组。

请参阅