VS.NET 2010对C#常量表达式的评估

NSN*_*NSN 5 c# visual-studio

当我在Visual Studio中尝试使用C#中的示例表达式时

public int Test()
{
    if (10/2 == 5)
        throw new Exception();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我保持表达式10/2 == 5时,vs.net会自动发出警告"检测到无法访问的代码".

如果我改变表达式10/2 == 6,IDE很高兴吗?怎么会发生?

编辑:对不完整的问题抱歉.即使在编译代码之前,它也会立即发生并发生?

我已经对每个回复进行了投票,并接受了基于FIFO的第一个答案

Tho*_*mas 9

if (10/2 == 5)
Run Code Online (Sandbox Code Playgroud)

将永远返回true,这意味着

throw new Exception();
Run Code Online (Sandbox Code Playgroud)

将永远执行,并且

return 0;
Run Code Online (Sandbox Code Playgroud)

永远不会到达


Jep*_*sen 4

10 / 2 == 5正如其他人所说,编译器可以在编译时计算表达式,因为它是常量表达式。它的计算结果为true,因此作用域之后的任何代码if都是不可访问的。如果更改为,则中的false代码将无法访问。if

现在考虑这段代码:

public int TestA() 
{ 
    if (10 / 2 == 5) 
        return 1; 
    return 0; 
} 

public int TestB() 
{ 
    if (10 / 2 == 6) 
        return 1; 
    return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

两种方法都会生成有关无法访问代码的警告!

C# 编译器的奇怪之处在于,如果无法访问的代码完全由throw语句组成,则不会发出有关无法访问的警告。

添加:此堆栈溢出问题是相关的