我找不到System.Runtime.CompilerServices.DiscardableAttribute
的实际用法,即使对于原型编译器也是如此。任何见解?感谢。
答案 0 :(得分: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可能会在为程序集生成本机代码时跳过它(因为该类永远不会被使用)。