Postupy: Dotazování metadat sestavení pomocí Reflexe ion (LINQ) (Visual Basic)
Následující příklad ukazuje, jak lze LINQ použít s reflexí k načtení konkrétních metadat o metodách, které odpovídají zadanému kritériu vyhledávání. V tomto případě dotaz najde názvy všech metod v sestavení, které vracejí výčtové typy, jako jsou pole.
Příklad
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
Příklad používá metodu Assembly.GetTypes k vrácení pole typů v zadaném sestavení. Použije se filtr klauzule Where, aby se vrátily pouze veřejné typy. Pro každý veřejný typ se vygeneruje poddotaz pomocí MethodInfo pole, které je vráceno z Type.GetMethods volání. Tyto výsledky jsou filtrovány tak, aby vracely pouze ty metody, jejichž návratový typ je pole nebo jiný typ, který implementuje IEnumerable<T>. Nakonec se tyto výsledky seskupí pomocí názvu typu jako klíče.