当我在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的第一个答案
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)
永远不会到达
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语句组成,则不会发出有关无法访问的警告。
添加:此堆栈溢出问题是相关的
| 归档时间: |
|
| 查看次数: |
282 次 |
| 最近记录: |