Como: consultar metadados de um Assembly com reflexão (LINQ)
A exemplo a seguir mostra como LINQ pode ser usado com reflexão para recuperar metadados específicos sobre os métodos que correspondem a um critério de pesquisa especificados.Nesse caso, a consulta encontrará os nomes de todos os métodos no assembly que retornam tipos enumeráveis, tais como matrizes.
Exemplo
Imports System.Reflection
Imports System.IO
Imports System.Linq
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.ReadKey()
End Sub
End Module
using System.Reflection;
using System.IO;
namespace LINQReflection
{
class ReflectionHowTO
{
static void Main(string[] args)
{
Assembly assembly = Assembly.Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken= b77a5c561934e089");
var pubTypesQuery = from type in assembly.GetTypes()
where type.IsPublic
from method in type.GetMethods()
where method.ReturnType.IsArray == true
|| ( method.ReturnType.GetInterface(
typeof(System.Collections.Generic.IEnumerable<>).FullName ) != null
&& method.ReturnType.FullName != "System.String" )
group method.ToString() by type.ToString();
foreach (var groupOfMethods in pubTypesQuery)
{
Console.WriteLine("Type: {0}", groupOfMethods.Key);
foreach (var method in groupOfMethods)
{
Console.WriteLine(" {0}", method);
}
}
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
}
O exemplo usa a GetTypes método para retornar uma matriz de tipos no assembly especificado.O onde filtro é aplicado para que somente os tipos públicos são retornados.Para cada tipo de público, uma subconsulta é gerada utilizando a MethodInfo matriz que é retornado de GetMethods chamar.Esses resultados são filtrados para retornar apenas aqueles cujo tipo de retorno é uma matriz ou então um tipo que implementa os métodos IEnumerable<T>.Finalmente, esses resultados são agrupados, usando o nome do tipo como uma chave.
Compilando o código
Criar um Visual Studio o projeto que se destina a.NET Framework versão 3.5.O projeto tem uma referência a System.Core.dll e um using diretiva (C#) ou Imports (Visual Basic) da declaração do namespace System. LINQ por padrão.No C# projetos, adicione um using diretriz para o namespace System. IO.
Copie este código para seu projeto.
Pressione F5 para compilar e executar o programa.
Pressione qualquer tecla para sair da janela do console.