Partilhar via


Como consultar os metadados de um assembly com Reflection (LINQ) (Visual Basic)

O exemplo a seguir mostra como o LINQ pode ser usado com reflexão para recuperar metadados específicos sobre métodos que correspondem a um critério de pesquisa especificado. Nesse caso, a consulta encontrará os nomes de todos os métodos no assembly que retornam tipos enumeráveis, como matrizes.

Exemplo

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

O exemplo usa o método Assembly.GetTypes para retornar uma matriz de tipos no assembly especificado. O filtro Where Clause é aplicado para que apenas os tipos públicos sejam retornados. Para cada tipo público, uma subconsulta é gerada usando a matriz MethodInfo retornada da chamada Type.GetMethods. Esses resultados são filtrados para retornar apenas os métodos cujo tipo de retorno é uma matriz ou então um tipo que implementa IEnumerable<T>. Finalmente, esses resultados são agrupados usando o nome do tipo como uma chave.

Ver também