Azi*_*ziz 3 .net c# compiler-construction compiler-optimization
我不太了解编译器以及.Net如何优化生成的机器代码,但想了解以下场景:
class AnyClass
{
public bool anyFlag;
AnyClass()
{
anyFlag = true;
}
public void Action()
{
if(anyFlag)
//Perform Certain Actions
}
}
Run Code Online (Sandbox Code Playgroud)
anyFlag在整个程序范围内不会改变.编译器是否会为Action方法生成MIL /机器代码?如果是这样,它会在那里检查吗?
在您的情况下,编译器不会过滤if语句,因为您的anyFlag是公共的(因此可以从多个位置更改),并且因为该值仅在构造函数中设置,所以编译器在运行时也不会显示此值.
以下代码执行您想要的操作:
static void MyFunc()
{
const bool flag = true;
string s = null;
if (flag)
{
s = "a";
}
else
{
s = "b";
}
}
Run Code Online (Sandbox Code Playgroud)
如果在Visual Studio中插入此代码,您将看到生成的警告,指出s ="b"; 永远不会到达,这个代码将被优化.