Como: consulta Metadados um assembly com reflexão (LINQ)
O exemplo a seguir mostra como LINQ pode ser usado com reflexão para recuperar metadados específicos sobre os métodos que correspondam a um critério de Pesquisar especificados. Nesse caso, a consulta localizará sistema autônomo nomes de todos sistema autônomo métodos no conjunto de módulos (assembly) que retornam tipos Enumeráveis sistema autônomo matrizes.
Exemplo
Imports System.Reflection
Imports System.IO
Imports System.Linq
Module Module1
Sub Main()
Dim file As String = "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll"
Dim asmbly As Assembly = Assembly.LoadFrom(file)
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 o GetTypes método para retornar uma matriz de tipos no assembly especificado. The onde filtro é aplicado para que apenas tipos públicos são retornados.Para cada tipo de público, uma subconsulta é gerada utilizando a MethodInfo matriz é retornado a partir do GetMethods Chame. Esses resultados são filtrados para retornar apenas os métodos cujo tipo de retorno é uma matriz ou que um tipo que implementa IEnumerable<T>. Finalmente, esses resultados são agrupados usando o nome do tipo sistema autônomo uma chave.
Compilando o código
Criar um Visual Studio projeto que se destina a .NET estrutura versão 3.5. O projeto tem uma referência a sistema.Core.dll e um using diretiva (translation from VPE for Csharp) ou Imports demonstrativo (Visual Basic) para o namespace sistema.LINQ por padrão. Em projetos translation from VPE for Csharp, adicione um using diretiva do namespace sistema.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.