Если вы знаете, какими типами они должны быть, вы можете использовать ограничение типа where
:
class MyClass<T1, T2> : IEnumerable<Tuple<T1, T2>>
where T1 : MyClass1
where T2 : MyClass2
Но нет никакого способа разрешить им быть любым классом,но следите за тем, чтобы они не были равны.Возможно, вам придется создать исключение в конструкторе, может быть:
if (typeof(T1) == typeof(T2)) {
throw new Exception("Types must not be the same.");
}