gettypes()返回奇怪的类型名称,例如"<>c"

本文关键字:quot 例如 返回 类型 gettypes | 更新日期: 2023-09-27 18:13:41

当使用Assembly.GetTypes()时,我得到以<>c....开头的Type.Name类型。

我试着谷歌如果这是匿名类型或其他东西。但不能得到一个真正好的答案。

Type上是否有一个属性来指示这些类型是什么?我不喜欢做if(type.Name.StartsWith("<>"))

gettypes()返回奇怪的类型名称,例如"<>c"

这些是编译器生成的显示类。您可以通过查找CompilerGeneratedAttribute:

来区分它们。
var attr = Attribute.GetCustomAttribute(type, typeof(CompilerGeneratedAttribute));

它们是编译器生成的类型,其中包括匿名类型,但也包括yield生成的IEnumerable<T>IEnumerator<T>IEnumerableIEnumerator的实现,以及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;
}
相关文章: