Это невозможно, нет, потому что ваш список представляет собой список типов , а не ссылок на экземпляров этого типа.
Ближайший, который вы можете легко найти, если предположить, что для каждого типа есть конструктор без параметров:
foreach (Type handlerType in handlers)
{
// Create an instance of the handler type
TokenBaseClass handler =
(TokenBaseClass) Activator.CreateInstance(handlerType);
if (handler.HandlesToken(AToken))
{
handler.HandleToken(AToken);
break;
}
}
РЕДАКТИРОВАТЬ: В ответ на ваш вопрос в комментариях, я бы отнесся к этому немного по-другому.
Я бы изменил ваш List<Type>
на List<Func<TokenKind, TokenClassBase>>
. Другими словами, список фабричных функций, от TokenKind
до TokenClassBase
. Функция для каждого типа будет зависеть от типа, но она будет либо возвращать экземпляр TokenClassBase
, или null
, если это TokenKind
не может быть обработано.
Тогда вы будете использовать:
foreach (var handlerFactory in handlerFactories)
{
TokenBaseClass handler = handlerFactory(AToken);
if (handler != null)
{
handler.HandleToken(AToken);
break;
}
}
Способ создания делегатов будет зависеть от точной природы вашего кода, но вы можете использовать лямбда-выражение или преобразование группы методов, возможно из статического метода.