Udostępnij za pośrednictwem


Module.FindTypes(TypeFilter, Object) Metoda

Definicja

Zwraca tablicę klas akceptowanych przez podane kryteria filtrowania i filtrowania.

public:
 virtual cli::array <Type ^> ^ FindTypes(System::Reflection::TypeFilter ^ filter, System::Object ^ filterCriteria);
public virtual Type[] FindTypes (System.Reflection.TypeFilter? filter, object? filterCriteria);
public virtual Type[] FindTypes (System.Reflection.TypeFilter filter, object filterCriteria);
abstract member FindTypes : System.Reflection.TypeFilter * obj -> Type[]
override this.FindTypes : System.Reflection.TypeFilter * obj -> Type[]
Public Overridable Function FindTypes (filter As TypeFilter, filterCriteria As Object) As Type()

Parametry

filter
TypeFilter

Delegat używany do filtrowania klas.

filterCriteria
Object

Obiekt używany do filtrowania klas.

Zwraca

Type[]

Tablica typu Type zawierająca klasy, które zostały zaakceptowane przez filtr.

Wyjątki

Nie można załadować co najmniej jednej klasy w module.

Przykłady

W poniższym przykładzie pokazano metodę FindTypes .

using namespace System;
using namespace System::Reflection;
using namespace System::Collections;
public ref class MySecondClass{};


// This class does not fit the filter criterion My*.
public ref class YourClass{};

int main()
{
   array<Module^>^moduleArray;
   moduleArray = Assembly::GetExecutingAssembly()->GetModules( false );
   
   // In a simple project with only one module, the module at index
   // 0 will be the module containing these classes.
   Module^ myModule = moduleArray[ 0 ];
   array<Type^>^tArray;
   tArray = myModule->FindTypes( Module::FilterTypeName, "My*" );
   IEnumerator^ myEnum = tArray->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Type^ t = safe_cast<Type^>(myEnum->Current);
      Console::WriteLine( "Found a module beginning with My*: {0}.", t->Name );
   }
}
using System;
using System.Reflection;

namespace ReflectionModule_Examples
{
    class MyMainClass
    {
        static void Main()
        {
            Module[] moduleArray;
            
            moduleArray = typeof(MyMainClass).Assembly.GetModules(false);
            
            // In a simple project with only one module, the module at index
            // 0 will be the module containing these classes.
            Module myModule = moduleArray[0];

            Type[] tArray;

            tArray = myModule.FindTypes(Module.FilterTypeName, "My*");
            
            foreach(Type t in tArray)
            {
                Console.WriteLine("Found a module beginning with My*: {0}.", t.Name);
            }
        }
    }

    class MySecondClass
    {
    }

    // This class does not fit the filter criteria My*.
    class YourClass
    {
    }
}
Imports System.Reflection

Namespace ReflectionModule_Examples
    Class MyMainClass
        Shared Sub Main()
            Dim moduleArray() As [Module]

            moduleArray = GetType(MyMainClass).Assembly.GetModules(False)

            ' In a simple project with only one module, the module at index
            ' 0 will be the module containing these classes.
            Dim myModule As [Module] = moduleArray(0)

            Dim tArray() As Type

            tArray = myModule.FindTypes([Module].FilterTypeName, "My*")

            Dim t As Type
            For Each t In tArray
                Console.WriteLine("Found a module beginning with My*: {0}", t.Name)
            Next t
        End Sub
    End Class

    Class MySecondClass
    End Class

    ' This class does not fit the filter criteria My*.
    Class YourClass
    End Class
End Namespace 'ReflectionModule_Examples

Uwagi

ReflectionTypeLoadException jest specjalnym wyjątkiem obciążenia klasy. Właściwość ReflectionTypeLoadException.Types zawiera tablicę klas, które zostały zdefiniowane w module i zostały załadowane. Ta tablica może zawierać niektóre wartości null. Właściwość ReflectionTypeLoadException.LoaderExceptions jest tablicą wyjątków reprezentujących wyjątki, które zostały zgłoszone przez moduł ładujący klasy. Otwory w tablicy klas są zgodne z wyjątkami.

Delegat podany przez filter jest wywoływany dla każdej klasy w module, przekazując wzdłuż Type obiektu reprezentującego klasę, a także dla danej filterCriteriaklasy . Jeśli filter zwraca określoną klasę, ta klasa zostanie uwzględniona w zwracanej tablicy. Jeśli filter zwraca nullwartość , zwracane są wszystkie klasy i filterCriteria są ignorowane.

FindTypes nie można używać do wyszukiwania sparametryzowanych typów, takich jak tablice.

Dotyczy

Zobacz też