Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
API refleksji platformy .NET służą do badania metadanych w zgromadzeniu .NET i tworzenia kolekcji typów, członków typów oraz parametrów znajdujących się w tym zgromadzeniu. Ponieważ te kolekcje obsługują interfejs ogólny IEnumerable<T> , mogą być odpytywane przy użyciu LINQ.
W poniższym przykładzie pokazano, jak LINQ można używać z odbiciem w celu pobrania określonych metadanych dotyczących metod pasujących do określonego kryterium wyszukiwania. W tym przypadku zapytanie znajduje nazwy wszystkich metod w zestawie, które zwracają typy wyliczalne, takie jak tablice.
Assembly assembly = Assembly.Load("System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e");
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: {groupOfMethods.Key}");
foreach (var method in groupOfMethods)
{
Console.WriteLine($" {method}");
}
}
W przykładzie użyto metody Assembly.GetTypes, aby zwrócić tablicę typów w określonym module. Filtr where jest stosowany, aby zwracane były tylko typy publiczne. Dla każdego typu publicznego podzapytanie jest generowane przy użyciu tablicy MethodInfo zwracanej z wywołania Type.GetMethods. Te wyniki są filtrowane w celu zwrócenia tylko tych metod, których typ zwracany jest tablicą lub inny typ implementujący IEnumerable<T>. Na koniec te wyniki są grupowane przy użyciu nazwy typu jako klucza.