Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si usano le API di reflection .NET per esaminare i metadati in un assembly .NET e creare raccolte di tipi, membri di tipo e parametri presenti in tale assembly. Poiché queste raccolte supportano l'interfaccia di IEnumerable<T> generica, è possibile eseguire query tramite LINQ.
Nell'esempio seguente viene illustrato come usare LINQ con reflection per recuperare metadati specifici sui metodi che corrispondono a un criterio di ricerca specificato. In questo caso, la query trova i nomi di tutti i metodi nell'assembly che restituiscono tipi enumerabili, ad esempio matrici.
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}");
}
}
Nell'esempio viene utilizzato il metodo Assembly.GetTypes per restituire una matrice di tipi nell'assembly specificato. Il al quale viene applicato il filtro in modo che vengano restituiti solo i tipi pubblici. Per ogni tipo pubblico, viene generata una sottoquery usando la matrice MethodInfo restituita dalla chiamata Type.GetMethods. Questi risultati vengono filtrati per restituire solo i metodi il cui tipo restituito è una matrice o un tipo che implementa IEnumerable<T>. Infine, questi risultati vengono raggruppati usando il nome del tipo come chiave.