c"后缀的额外类型,该类型显然不存在-6ren"> c"后缀的额外类型,该类型显然不存在-当使用 GetTypes 执行 GetExecutingAssembly 时,它会检索带有奇怪的“+<>c”后缀的额外类型。我假设这可能是一些特殊字符或其他什么?如下图所示。预期结果应该只是列表中的 -6ren">
gpt4 book ai didi

c# - GetExecutingAssembly 和 GetTypes 正在检索带有 "+<>c"后缀的额外类型,该类型显然不存在

转载 作者:行者123 更新时间:2023-12-03 22:56:37 27 4
gpt4 key购买 nike

当使用 GetTypes 执行 GetExecutingAssembly 时,它会检索带有奇怪的“+<>c”后缀的额外类型。我假设这可能是一些特殊字符或其他什么?如下图所示。预期结果应该只是列表中的 3 项,但它正在检索额外的第四项,该项与其中一项重复,但末尾带有“+<>c”?

enter image description here

在处理返回的类型之前,我必须进行一些黑客检查,如下所示:

if (@class.ToString().Contains("<")) // Ignore funny types returned by reflection
continue;

如果感兴趣的话,这些类的一般结构是相同的,如下所示:

public class WebJobLogsForErrorsCheck : MonitoringJob
{

public WebJobLogsForErrorsCheck(IKernel kernel) : base(kernel)
{
}
}

最佳答案

编译器有时必须构造新类型,并使用“无法发音”的名称 - 任何程序员都无法在有效的 C# 程序中编写自己的名称1 - 以确保它创建的名称不会冲突。

它将创建此类类型来支持例如迭代器方法或异步方法,这两种方法实际上都必须在幕后作为状态机实现。


对于这个具体案例,我相信<>c作为一种优化,类往往在用于缓存非捕获 lambda 时被构造。


1它可以做到这一点,因为有效的 CLR 标识符集是有效的 C# 标识符集的超集。

关于c# - GetExecutingAssembly 和 GetTypes 正在检索带有 "+<>c"后缀的额外类型,该类型显然不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50600261/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com