Unreachable Code Detected (Why?)
所以,为什么在这段代码中检测到无法访问的代码:
1 2 3 4 5 6 7 8 9 10 | public bool GetKeyPressed(KeyCode key) { for (int i = 0; i < keys.Count; i++) if (keys[i].key == key && keys[i].pressed) return true; else return false; return false; } |
索引(i)显然无法访问…为什么?
您的代码有一个循环计算一次,因此第一次迭代将始终返回。
如果这就是你想要的,就这么说吧,
1 | return keys[0].key == key && keys[0].pressed; |
但是,如果(这是我在这里怀疑的),如果数组中的任何一个满足您的测试,您希望返回true,那么使用linq的
1 | return keys.Any(k => k.key == key && k.pressed); |
扩展JDphenix的答案,我认为我们需要理解为什么您的循环"评估一次",只有这样我们才能理解为什么存在"不可访问的代码"。
1 2 3 4 5 6 7 8 9 10 | public bool GetKeyPressed(Keys key) { for (int i = 0; i < keys.Count; i++) if (keys[i].key == key && keys[i].pressed) return true; else return false; return false; } |
更明显的是,如果我们通过JetBrains Resharper查看代码:
代码也可以写为:
1 2 3 4 5 6 7 8 9 10 | public bool GetKeyPressed(Keys key) { for (int i = 0; i < keys.Count; ) // Look Ma, no i++ !!! if (keys[i].key == key && keys[i].pressed) return true; else return false; return false; } |
不要误以为方法末尾的最后一个
当然,对代码进行更好的格式设置会很长一段时间,从而揭示出第一个
您的代码有两条代码路径,一条是通过
1 2 3 4 5 6 7 | public bool GetKeyPressed(KeyCode key) { for (int i = 0; i < keys.Count; i++) if (keys[i].key == key && keys[i].pressed) return true; return false; } |