Porady: zapytanie dotyczące metadanych zestawu z odbiciem (LINQ)
W poniższym przykładzie jak LINQ , można z przed powielaniem w protokole do pobierania określonych metadanych dotyczących metod, które spełniają określone kryteria wyszukiwania.W przypadku kwerendy będzie znaleźć nazwy wszystkich metod w zestawie, który zwraca agregującym typów, takich jak tablice.
Przykład
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();
}
}
}
W przykładzie użyto GetTypes metody zwracają tablicę typów w określonym zestawie.Gdzie stosowany jest filtr, tak aby zwracane są tylko typy publiczne.Dla każdego typu publiczne podkwerendę jest generowany przy użyciu MethodInfo tablicy, który jest zwracany z GetMethods wywołania.Wyniki te są filtrowane do zwracania tylko te metody, których typ zwracany jest tablicą lub innym, typ, który implementuje IEnumerable.Wreszcie wyniki te są grupowane przy użyciu nazwy typu jako klucz.
Kompilowanie kodu
Tworzenie Visual Studio projekt, który jest przeznaczony.NET Framework w wersji 3.5.Projekt zawiera odwołanie do System.Core.dll i using dyrektywy (C#) lub Imports instrukcji (Visual Basic) dla nazw System.Linq domyślnie.W języku C# projektów, należy dodać using dyrektywa obszaru nazw System.IO.
Skopiuj ten kod do projektu.
Naciśnij klawisz F5, aby skompilować i uruchomić program.
Naciśnij dowolny klawisz, aby zamknąć okno konsoli.