我有一个FullName为的Type(如果这有帮助):
"System.Collections.ObjectModel.ObservableCollection`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"
从那个Type中,我想把"System.Collections.ObjectModel.ObservableCollection"
作为一个字符串,但我想“干净地”这样做,这意味着,不要将字符串与char '`'
分开。
我认为策略是获得类似Type或其他FullName将为"System.Collections.ObjectModel.ObservableCollection"
的东西,但我真的无法做到:/
答案 0 :(得分:3)
“真实”类型名称不是System.Collections.ObjectModel.ObservableCollection
,而是System.Collections.ObjectModel.ObservableCollection`1
,因为VirtualBlackFox正确提及(因为它是泛型类型,`1
表示通用参数的数量)。
使用type.Name
(提供ObservableCollection`1
)和type.Namespace
(提供System.Collections.ObjectModel
)可以非常接近。
并非您的类型很可能不是泛型类型,而是其通用参数= string
的规范。
您可以使用type.GetGenericArguments()
获取参数类型(string
)。
答案 1 :(得分:2)
只是为了补充弗拉德的答案,不要接受我的。
`
字符在CLI(ECMA-335)规范中直接指定,因此解析它是安全且“干净的”(只要您的C#代码在CLI基础结构下运行):
10.7.2 :
符合CLS的通用类型名称使用该格式进行编码
"name[`arity]"
,其中[...]表示坟墓 重音字符"`"
和arity在一起是可选的。 编码名称应遵循以下规则:
- name应为不包含
"`"
字符的ID(参见Partition II)。- arity指定为无符号十进制数,不带前导零或空格。
- 对于普通泛型类型,arity是在类型上声明的类型参数的数量。
- 对于嵌套泛型类型,arity是新引入的类型参数的数量。
醇>