gettypes()返回奇怪的类型名称,例如"<>c"
本文关键字:quot 例如 返回 类型 gettypes | 更新日期: 2023-09-27 18:13:41
当使用Assembly.GetTypes()
时,我得到以<>c....
开头的Type.Name
类型。
我试着谷歌如果这是匿名类型或其他东西。但不能得到一个真正好的答案。
Type上是否有一个属性来指示这些类型是什么?我不喜欢做if(type.Name.StartsWith("<>"))
这些是编译器生成的显示类。您可以通过查找CompilerGeneratedAttribute
:
var attr = Attribute.GetCustomAttribute(type, typeof(CompilerGeneratedAttribute));
它们是编译器生成的类型,其中包括匿名类型,但也包括yield
生成的IEnumerable<T>
、IEnumerator<T>
、IEnumerable
和IEnumerator
的实现,以及await
生成的状态机结构。
他们将拥有CompilerGeneratedAttribute
.
你形容这些名字是"奇怪的",他们是故意这样的。它们都是有效的。net名称,但在常见的。net语言中无效,特别是c#和VB.NET。这意味着你不能直接用c#代码创建这样的类,所以不需要任何逻辑来检查程序员是否创建了一个匹配的类。
这些是CompilerGeneratedAttribute类
区分编译器生成的元素和用户生成的元素元素。这个类不能被继承。
你可以点击
using System.Runtime.CompilerServices;
bool CompilerGen(Type t)
{
var attr = Attribute.GetCustomAttribute(t, typeof(CompilerGeneratedAttribute));
return attr != null;
}