Предполагается, что baseType содержит объект System.Type, который вы хотите проверить, а matchType содержит объект System.Type с типом текущей итерации (через цикл foreach или любой другой):
Если вы хотите проверить, является ли matchType производным от класса, представленного baseType, я бы использовал
matchType.IsSubclassOf(baseType)
И если вы хотите проверить, соответствует ли matchType интерфейсу, представленному baseType, я бы использовал
matchType.GetInterface(baseType.ToString(), false) != null
Конечно, я бы сохранял baseType.ToString () как глобальную переменную, поэтому мне не нужно вызывать ее постоянно. И поскольку вам, вероятно, понадобится это в контексте, где у вас много типов, вы можете также рассмотреть возможность использования System.Threading.Tasks.Parallel.ForEach-Loop для итерации всех ваших типов ...