1

System.Runtime.CompilerServices.DiscardableAttribute即使对于原型编译器,我也找不到. 有什么见解吗?谢谢。

4

1 回答 1

6

举一个比文档说的更具体的例子 - 你可以有一种语言支持内联静态方法调用,这些方法调用使用一些特殊修饰符(来自静态类)标记:

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

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

int y = Bar.Foo(x);

编译器将其编译为:

int y = x + 10;

您需要Bar在编译后的代码中保留 的定义,因为如果您从其他项目引用程序集,您希望看到它(然后当您调用该Foo方法时,编译器只会从该程序集中获取编译后的 IL)。

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

于 2011-02-18T18:20:01.180 回答