Consulta de los metadatos de un ensamblado con reflexión (LINQ) (Visual Basic)
En el ejemplo siguiente se muestra cómo se puede usar LINQ con reflexión para recuperar metadatos concretos sobre métodos que coinciden con un criterio de búsqueda especificado. En este caso, la consulta encontrará 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
El ejemplo usa el método Assembly.GetTypes para devolver una matriz de tipos en el ensamblado especificado. Se aplica el filtro Where Clause para que solo se devuelvan tipos públicos. Para cada tipo público, se genera una consulta anidada con la matriz MethodInfo que se devuelve desde la llamada Type.GetMethods. Estos resultados se filtran para que solo devuelvan los métodos cuyo tipo de valor devuelto sea una matriz, o un tipo que implemente IEnumerable<T>. Por último, estos resultados se agrupan usando el nombre de tipo como una clave.