Compartir a través de


Cómo consultar los metadatos de un ensamblado con Reflection (LINQ) (Visual Basic)

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 buscará los nombres de todos los métodos del ensamblado que devuelven tipos enumerables como matrices.

Ejemplo

Imports System.Linq
Imports System.Reflection  

Module Module1  
    Sub Main()  
        Dim asmbly As Assembly =
            Assembly.Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken= b77a5c561934e089")  
  
        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.WriteLine("Press any key to exit... ")  
        Console.ReadKey()  
    End Sub  
End Module  

En el ejemplo se usa el Assembly.GetTypes método para devolver una matriz de tipos en el ensamblado especificado. El filtro Where Clause se aplica para que solo se devuelvan 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.

Consulte también