Полное имя общего типа без информации об ассемблере?

У меня есть таблица базы данных, где я храню высоту, ширину, состояние и т.д. окон. В качестве идентификатора для окон я использую полное имя типа формы. Он работает хорошо, но я обнаружил, что некоторые формы, которые являются родовыми, получают имена, которые невероятно длинны. Причина в том, что общий тип указан с полной информацией о сборке. Есть ли способ пропустить это?

Например, полное имя обычной формы будет выглядеть так:

Some.Name.Space.NameOfForm

Но полное имя общей формы выглядит следующим образом:

Some.Name.Space.NameOfForm`1[[Some.Other.Name.Space.GenericType, AssemblyName, Version=1.0.2.0, Cuntulre=neutral, PublicKeyToken=null]]

Почему это так долго? Есть ли способ получить более короткую версию? Например, что-то вроде:

Some.Name.Space.NameOfForm`1[[Some.Other.Name.Space.GenericType]]

Любые подсказки?

Ответ 1

Я согласен с dbemerlin в том, что ваша конечная цель кажется странной, но я просто хотел указать, что

GetType().ToString();

похоже, возвращает более короткую версию имени типа (без информации об сборке общих аргументов).

Я предполагаю, что это может быть удобно для более читаемой пользователем версии имени типа.

Ответ 2

Я предполагаю, что Тип, используемый для общего класса, зависит от конкретной сборки (как и большинство классов .NET), поэтому я не думаю, что вы получите что-то еще, не создавая эту строку вручную путем анализа или синтаксического анализа строк.

OTOH Я не думаю, что использование имен типов в качестве ключей - хорошая идея, может быть, вам стоит подумать о получении другого ключа (но я не знаю требований, поэтому я не могу рекомендовать что-то еще)