Como consultar metadados de um assembly com reflexão (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 Assembly.GetTypes método 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 MethodInfo matriz retornada da Type.GetMethods chamada. 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.