Вам следует избегать конфликта так же, как это делают C # и VB.Net. При передаче имени универсального типа добавьте символ `и число универсальных параметров. Например, следующие имена типов фактически генерируются для вышеуказанного
class Test`1 // Test<T>
class Test`2 // Test<T1,T2>
Вы можете просмотреть это искажение имени в BCL с отражателем. Установите язык на IL вместо C #, и он будет отображать фактические имена типов, которые выводятся в метаданных, вместо предварительно подтвержденного имени языка.