“撇号”是什么意思?号”在具有泛型的属性的对象类型中(例如“Collection`1”)?
我有一个带有属性 (MyProperty
) 的对象 (MyObject
)。我想获取它的类型名称(即 String
或 MyClass
等)。我使用:
PropertyInfo propInfo = typeof(MyObject).GetProperty("MyProperty");
Console.WriteLine(propInfo.PropertyType.Name);
Console.WriteLine(propInfo.PropertyType.FullName);
简单类型没有问题,但是当 MyProperty
是泛型类型时,我在获取其名称时遇到问题(例如 Collection
)。它打印:
集合`1
System.Collections.ObjectModel.Collection`1[[System.String、mscorlib、Version=2.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089]]
那是什么`1
?如何获取“Collection
”?
I have an object (MyObject
) with a property (MyProperty
). I want to get it's type name (i.e. String
or MyClass
etc.). I use:
PropertyInfo propInfo = typeof(MyObject).GetProperty("MyProperty");
Console.WriteLine(propInfo.PropertyType.Name);
Console.WriteLine(propInfo.PropertyType.FullName);
No problem with simple types, but when MyProperty
is a generic type, I face problems on getting it's name (e.g. Collection<String>
). It prints:
Collection`1
System.Collections.ObjectModel.Collection`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
What is that `1
? And how can I obtain "Collection<String>
"?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
`1
表示泛型类型,具有 1 个泛型参数。获取字符串的一种方法是使用 System.CodeDom,正如@LukeH建议的:
另一种方法是此处。
请参阅下面的 @jaredpar 的代码:
The
`1
means a generic type, with 1 generic parameter.One way of getting the string is by using the System.CodeDom, as suggested by @LukeH:
An alternative method is here.
See below for @jaredpar's code:
这是 CLR 内部类型名。
该数字是泛型类型参数的数量,因为类型可以重载。
(
Func`1
和Func`2
是不同的类型)没有内置方法来获取 C# 风格的类型名,因为 CLR 与 C# 无关。
This is a CLR internal typename.
The number is the number of generic type parameters, since types can be overloaded.
(
Func`1
andFunc`2
are different types)There is no built-in way to get a C#-style typename, since the CLR has nothing to do with C#.
SLAks 已经解释了`1 的含义。
关于第二个问题:您可以使用 Type.GetGenericArguments:
SLaks already explained what `1 means.
About your second question: You can obtain the name of the generic type parameters by using Type.GetGenericArguments: