使用时,Assembly.GetTypes()我会获得以此为Type.Name开头的类型<>c.....
我试图谷歌,如果这是匿名类型或其他东西.但无法得到一个非常好的答案.
Type上是否有属性表明这些类型是什么?我不喜欢这样做if(type.Name.StartsWith("<>"))
Yuv*_*kov 36
这些是编译器生成的显示类.您可以通过查找以下内容来区分它们CompilerGeneratedAttribute:
var attr = Attribute.GetCustomAttribute(type, typeof(CompilerGeneratedAttribute));
Run Code Online (Sandbox Code Playgroud)
Jon*_*nna 10
他们是编译器生成的类型,其中包括匿名类型,但也实现IEnumerable<T>,IEnumerator<T>,IEnumerable和IEnumerator由制造yield和生产的状态机结构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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2483 次 |
| 最近记录: |