Получить строку «System.Collections.ObjectModel.ObservableCollection» из типа (System.type), содержащего обобщенную коллекцию ObservableCollection? - PullRequest
1 голос
/ 01 декабря 2011

Я получил тип, чье полное имя (если это помогает):

"System.Collections.ObjectModel.ObservableCollection`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"

Из этого типа я хотел бы получить "System.Collections.ObjectModel.ObservableCollection" в виде строки, но я бы хотел это сделать "чисто », что означает, не разбивая строку символом '`'.Я думаю, что стратегия состоит в том, чтобы получить что-то вроде Type или что-то еще, чье FullName будет "System.Collections.ObjectModel.ObservableCollection", но мне действительно не удается это сделать: /

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

«Настоящее» имя типа - это не System.Collections.ObjectModel.ObservableCollection, а System.Collections.ObjectModel.ObservableCollection`1, как правильно упоминает VirtualBlackFox (поскольку это универсальный тип, `1 указывает количество универсальных параметров).

Вы можете подойти довольно близко, используя type.Name (дает ObservableCollection`1) и type.Namespace (дает System.Collections.ObjectModel).

Не то, чтобы ваш тип, скорее всего, был не универсальным типом, а его спецификацией с универсальным параметром = string.

Вы можете получить тип (ы) параметров (string в вашем случае), используя type.GetGenericArguments().

2 голосов
/ 01 декабря 2011

Просто в дополнение к ответу Влада не принимайте мой.

Символ ` указан в спецификации CLI ( ECMA-335 ) напрямую, поэтомуанализировать его безопасно и «чисто» (если ваш код C # работает под инфраструктурой CLI):

10.7.2 :

CLS-совместимые имена универсальных типов кодируются в формате "name[`arity]", где […] указывает, что символ серьезного акцента "`" и арность вместе являются необязательными.Закодированное имя должно соответствовать следующим правилам:

  1. имя должно быть идентификатором (см. Раздел II), которое не содержит символ "`".
  2. арность указывается в виде десятичного знака без знакачисло без начальных нулей или пробелов.
  3. Для обычного универсального типа arity - это число параметров типа, объявленных в типе.
  4. Для вложенного универсального типа arity - это число вновь введенных типов.введите параметры.
...