리플렉션을 사용하여 어셈블리의 메타데이터를 쿼리하는 방법(LINQ)
.NET 리플렉션 API를 사용하여 .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: {0}", groupOfMethods.Key);
foreach (var method in groupOfMethods)
{
Console.WriteLine(" {0}", method);
}
}
이 예제에서는 Assembly.GetTypes 메서드를 사용하여 지정된 어셈블리의 형식 배열을 반환합니다. public 형식만 반환되도록 where 필터가 적용됩니다. 각 public 형식에 대해 Type.GetMethods 호출에서 반환된 MethodInfo 배열을 사용하여 하위 쿼리가 생성됩니다. 이러한 결과는 해당 반환 형식이 배열이거나 IEnumerable<T>을 구현하는 형식인 메서드만 반환하도록 필터링됩니다. 마지막으로, 이러한 결과는 형식 이름을 키로 사용하여 그룹화됩니다.
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET