2010-01-25 5 views
10

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

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

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]] 

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

+0

Как вы получаете это имя? .GetType(). FullName? –

+0

@Tor: Это было бы правильно, да. – Svish

+0

@Svish [ответ b8adamson] (http://stackoverflow.com/a/4662878/521757) на самом деле правильный. – jnm2

ответ

11

I согласен с dbemerlin в том, что ваша конечная цель кажется странным, но я просто хотел бы отметить, что

GetType().ToString(); 

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

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

+4

Это должен быть ответ. Благодарю. – IllidanS4

2

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

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