Учитывая, что у вас есть только два типа здесь, я бы вместо этого пошел по маршруту OO и просто имел бы два класса для этих двух типов.
Дженерики лучше всего использовать там, где обстоятельства, при которых они могут быть применены, как вы знаете, дженерики . Они намного менее полезны в подобных обстоятельствах.
Вы можете ограничиться только структурами или типами классов, и я думаю, что должны быть числовые или операторные ограничения (например, должны поддерживать + =)
Int и string действительно сильно отличаются друг от друга, и, конечно, они отличаются от int и double. Для универсального класса не имеет смысла поддерживать неизменяемый ссылочный тип строки и тип значения int, не поддерживая также другие типы, более похожие на любой из них.