Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Vous utilisez les API de réflexion .NET pour examiner les métadonnées d’un assembly .NET et créer des collections de types, de membres de type et de paramètres qui se trouvent dans cet assembly. Étant donné que ces collections prennent en charge l’interface générique IEnumerable<T> , elles peuvent être interrogées à l’aide de LINQ.
L’exemple suivant montre comment LINQ peut être utilisé avec la réflexion pour récupérer des métadonnées spécifiques sur les méthodes qui correspondent à un critère de recherche spécifié. Dans ce cas, la requête recherche les noms de toutes les méthodes de l’assembly qui retournent des types énumérables tels que des tableaux.
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}");
}
}
L’exemple utilise la Assembly.GetTypes méthode pour retourner un tableau de types dans l’assembly spécifié. Le filtre where est appliqué afin que seuls les types publics soient renvoyés. Pour chaque type public, une sous-requête est générée en utilisant le tableau MethodInfo retourné par l'appel de Type.GetMethods. Ces résultats sont filtrés pour renvoyer uniquement les méthodes dont le type de retour est un tableau ou un autre type qui implémente IEnumerable<T>. Enfin, ces résultats sont regroupés à l’aide du nom de type en tant que clé.