次の方法で共有


方法: リフレクションを使用してアセンブリのメタデータにクエリを実行する (LINQ) (Visual Basic)

次の例は、LINQ をリフレクションと共に使用して、指定した検索条件に一致するメソッドに関する特定のメタデータを取得する方法を示しています。 この場合、クエリは、配列などの列挙可能な型を返すアセンブリ内のすべてのメソッドの名前を検索します。

Imports System.Linq
Imports System.Reflection  

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.WriteLine("Press any key to exit... ")  
        Console.ReadKey()  
    End Sub  
End Module  

この例では、Assembly.GetTypes メソッドを使用して、指定したアセンブリ内の型の配列を返します。 Where 句フィルターは、パブリック型のみが返されるように適用されます。 パブリック型ごとに、MethodInfo 呼び出しから返される Type.GetMethods 配列を使用してサブクエリが生成されます。 これらの結果は、戻り値の型が配列であるか、IEnumerable<T>を実装する型であるメソッドのみを返すようにフィルター処理されます。 最後に、これらの結果は、型名をキーとして使用してグループ化されます。

こちらも参照ください