Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Você usa as APIs de reflexão do .NET para examinar os metadados em um assembly .NET e criar coleções de tipos, membros de tipo e parâmetros que estão nesse assembly. Como essas coleções suportam a interface IEnumerable<T> genérica, elas podem ser consultadas usando LINQ.
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 localiza os nomes de todos os métodos no assembly que retornam tipos enumeráveis, como matrizes.
Assembly assembly = Assembly.Load("System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e");
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: {groupOfMethods.Key}");
foreach (var method in groupOfMethods)
{
Console.WriteLine($" {method}");
}
}
O exemplo usa o método Assembly.GetTypes para retornar uma matriz de tipos no assembly especificado. No , o filtro é 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.