Postupy: Vytvoření dotazu na metadata sestavení s reflexí (LINQ)
Následující příklad ukazuje jak LINQ s odraz lze načíst metadata specifické metody, které odpovídají zadanému vyhledávacímu kritériu.V tomto případě dotaz vyhledá názvy všech metod v sestavení, která vrátí agregující typy jako matice.
Příklad
Imports System.Reflection
Imports System.IO
Imports System.Linq
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.ReadKey()
End Sub
End Module
using System.Reflection;
using System.IO;
namespace LINQReflection
{
class ReflectionHowTO
{
static void Main(string[] args)
{
Assembly assembly = Assembly.Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken= b77a5c561934e089");
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: {0}", groupOfMethods.Key);
foreach (var method in groupOfMethods)
{
Console.WriteLine(" {0}", method);
}
}
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
}
V příkladu GetTypes metoda vrátí pole typů v zadaném sestavení.Kde filtr tak, aby byly vráceny pouze veřejné typy.Pro každý typ veřejné poddotazu je generován pomocí MethodInfo matice, která je vrácena z GetMethods volání.Tyto výsledky jsou filtrovány pouze metody, jejichž návratový typ je matice nebo jinak typ, který implementuje vrátit IEnumerable.Tyto výsledky nakonec seskupeny pomocí názvu typu jako klíč.
Probíhá kompilace kódu
Vytvoření Visual Studio projektu, který se zaměřuje.NET Framework verze 3.5.Projekt obsahuje odkaz na System.Core.dll a using směrnice (C#) nebo Imports prohlášení (Visual Basic) pro výchozí obor názvů System.Linq.V jazyce C# projekty, přidejte using směrnice pro obor názvů System.IO.
Zkopírujte tento kód do projektu.
Stisknutím klávesy F5 sestavit a spustit program.
Stisknutím libovolné klávesy uzavřete okno konzoly.