Condividi tramite


Come: Eseguire una query sui metadati di un assembly con *reflection* (LINQ) (Visual Basic)

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 troverà i nomi di tutti i metodi nell'assembly che restituiscono tipi enumerabili, ad esempio matrici.

Esempio

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  

Nell'esempio viene utilizzato il metodo Assembly.GetTypes per restituire una matrice di tipi nell'assembly specificato. Il filtro Clausola Where viene applicato 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.

Vedere anche