什么是DiscardableAttribute用于?

ara*_*ido 1 .net c# compiler-construction clr rotor

System.Runtime.CompilerServices.DiscardableAttribute即使对于原型编译器,我找不到实际用途.任何见解?谢谢.

Tom*_*cek 6

为了给出比文档所说的更具体的示例 - 您可以使用一种语言来支持使用一些特殊修饰符(来自静态类)标记的静态方法调用的内联:

static class Bar {
  static inline void Foo(int a) { // Note fictional 'inline' modifier
    return a + 10;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果你有这样的类,那么你的任何其他代码都不会真正引用它.当你写:

int y = Bar.Foo(x);
Run Code Online (Sandbox Code Playgroud)

编译器将其编译为:

int y = x + 10;
Run Code Online (Sandbox Code Playgroud)

您需要保留已Bar编译代码中的定义,因为如果您从其他项目引用程序集,则需要查看它(当您调用该Foo方法时,编译器将只从该程序集中获取已编译的IL).

但是,该类Bar永远不会在运行时使用(它只是为了保留代码,而不是实际执行它).我想你可以将它标记为Discardable,并且JIT可能在为程序集生成本机代码时跳过它(因为该类永远不会被使用).