首页 > 解决方案 > '<>c.<>9' 是什么意思?我找不到它们的任何声明,它们来自哪里?

问题描述

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

标签: c#.netasp.net-core

解决方案


这是某些编译器生成的代码中某些标识符的一部分。C# 中有多种语言特性,它们被编译器扩展为代码,例如await' s、auto-propertiesyield return's、闭包等。

UPD

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

private static readonly Action<object> _cancelTokenSource = state => ((CancellationTokenSource)state).Cancel();

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

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();
  }
}

推荐阅读