Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Api отражения .NET используются для проверки метаданных в сборке .NET и создания коллекций типов, элементов типа и параметров, которые находятся в этой сборке. Поскольку эти коллекции поддерживают универсальный интерфейс IEnumerable<T>, их можно запрашивать с помощью LINQ.
В следующем примере показано использование LINQ с отражением для извлечения определенных метаданных о методах, соответствующих условиям поиска. В этом случае запрос находит имена всех методов в сборке, возвращающих перечислимые типы, такие как массивы.
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}");
}
}
В примере используется метод Assembly.GetTypes для возвращения массива типов в указанной сборке. Чтобы вернуть только открытые типы, применяется фильтр where. Для каждого открытого типа создается вложенный запрос с использованием массива MethodInfo, который возвращается из вызова Type.GetMethods. Эти результаты фильтруются для возвращения только тех методов, возвращаемый тип которых является массивом или типом, который реализует IEnumerable<T>. Наконец, эти результаты группируются с помощью имени типа в качестве ключа.