`<>c.<>9` 是什么意思?我找不到他们的任何声明,他们来自哪里?

Qui*_*Von 3 .net c# decompiling asp.net-core

这里是JustDecompile反编译的一个ASP.NET Core nuget包,我看不懂<>c.<>9. 我发现他们没有声明,很奇怪,Nuget包名是Microsoft.Extensions.FileProviders.Physical,类文件名是PhysicalFilesWatcher.

直接反编译截图

Gur*_*ron 5

这是某些编译器生成的代码中某些标识符的一部分(C# 不允许开发人员在标识符名称<中使用and ,而IL允许)。C# 中有多种语言特性,可以通过编译器扩展为代码,例如,自动属性>awaityield return闭包等。

UPD

在这种情况下,根据我的反编译,它似乎是编译器为此Actionlambda 生成的代码:

private static readonly Action<object> _cancelTokenSource = state => ((CancellationTokenSource)state).Cancel();
Run Code Online (Sandbox Code Playgroud)

它是通过如下方式在生成的静态构造函数中初始化的:

PhysicalFilesWatcher._cancelTokenSource = new Action<object>((object) PhysicalFilesWatcher.'<>c.<>9, __methodptr(<. cctor>b__43_0));

[CompilerGenerated]
[Serializable]
private sealed class <>c
{
  public static readonly PhysicalFilesWatcher.<>c <>9;

  static <>c()
  {
    PhysicalFilesWatcher.<>c <>9 = new PhysicalFilesWatcher.<>c();
  }

  public <>c()
  {
    base..ctor();
  }

  internal void <. cctor>b__43_0(object state)
  {
    ((CancellationTokenSource) state).Cancel();
  }
}
Run Code Online (Sandbox Code Playgroud)