Поделиться через


Module.FindTypes(TypeFilter, Object) Метод

Определение

Возвращает массив классов, удовлетворяющих указанному фильтру и критериям фильтра.

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()

Параметры

filter
TypeFilter

Делегат, который используется для фильтрования классов.

filterCriteria
Object

Объект, который используется для фильтрования классов.

Возвращаемое значение

Type[]

Массив типа Type, который содержит классы, удовлетворяющие критериям фильтра.

Исключения

Невозможно загрузить один или несколько классов в модуле.

Примеры

В следующем примере демонстрируется 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

Комментарии

ReflectionTypeLoadException — это специальное исключение нагрузки класса. Свойство ReflectionTypeLoadException.Types содержит массив классов, которые были определены в модуле и были загружены. Этот массив может содержать некоторые значения NULL. Свойство ReflectionTypeLoadException.LoaderExceptions представляет собой массив исключений, представляющих исключения, созданные загрузчиком классов. Отверстия в массиве классов соответствуют исключениям.

Делегат, заданный параметром filter , вызывается для каждого класса в модуле, передавая объект Type , представляющий класс , а также заданный filterCriteria. Если filter возвращает определенный класс, этот класс будет включен в возвращаемый массив. Если filter возвращает nullзначение , возвращаются все классы и filterCriteria игнорируются.

FindTypes не может использоваться для поиска параметризованных типов, таких как массивы.

Применяется к

См. также раздел