Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las API de reflexión de .NET se usan para examinar los metadatos de un ensamblado de .NET y crear colecciones de tipos, miembros de tipo y parámetros que se encuentran en ese ensamblado. Dado que estas colecciones admiten la interfaz genérica IEnumerable<T> , se pueden consultar mediante LINQ.
En el ejemplo siguiente se muestra cómo se puede usar LINQ con la reflexión para recuperar metadatos específicos sobre los métodos que coinciden con un criterio de búsqueda especificado. En este caso, la consulta busca los nombres de todos los métodos del ensamblado que devuelven tipos enumerables como matrices.
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}");
}
}
En el ejemplo se usa el Assembly.GetTypes método para devolver una matriz de tipos en el ensamblado especificado. El filtro where se aplica para que solo se devuelvan los tipos públicos. Para cada tipo público, se genera una subconsulta mediante la matriz MethodInfo que se devuelve por la llamada Type.GetMethods. Estos resultados se filtran para devolver solo los métodos cuyo tipo de valor devuelto es una matriz o, de lo contrario, un tipo que implementa IEnumerable<T>. Por último, estos resultados se agrupan mediante el nombre de tipo como clave.