Возможно, вам лучше использовать словарь, где ключ - это кортеж двух типов, с которыми вы взаимодействуете, и значения - Interact, поэтому каждая реализация Interact должна выполнить какое-то приведение
private Dictionary<Tuple<Type, Type>, IInteract<Object, Object>> interactions = new Dictionary<Tuple<Type, Type>, IInteract<Object, Object>>();
Это немного грязно, но потом вы можете добавить к этому:
IInteract<Object, Object> superClassIntInteraction = someInteractionClass;
interactions.Add(new Tuple<Type, Type>(typeof(SuperClass),typeof(int)), superClassIntInteraction);
Я предполагаю, что вы хотите иметь возможность поиска по списку / словарю, чтобы впоследствии найти конкретное взаимодействие, в котором словарь пригодится