那么,为什么在此代码中检测到无法访问的代码:
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)显然无法访问......为什么?
答案 0 :(得分:4)
您的代码有一个评估一次的循环,因此第一次迭代将始终返回。
如果这就是你想要的,那就说吧,
Python
但是(如果我怀疑这里),如果数组中的任何符合您的测试,则您希望返回true,然后使用LINQ的return keys[0].key == key && keys[0].pressed;
,
Any()
答案 1 :(得分:0)
您的代码有两个代码路径,一个是pthread_create
条件,另一个是if
。这意味着控件将以这两种方式离开功能。所以else之后的return语句永远不会触发。这就是编译器将其指向无法访问的代码的原因。使用以下代码可以避免这种情况。
else
答案 2 :(得分:0)
扩展 jdphenix 回答,我认为我们需要了解为什么你的循环&#34; 评估一次&#34;只有这样我们才能理解为什么有&#34;无法访问的代码&#34; 。
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;
}
for
循环有一个构成正文的if-else
语句。 if
保护如果满意则返回true
,否则它将执行返回else
的下一个false
语句。最终结果是,在将控制权返回给调用方法之前,最多只执行一个循环循环,而不管keys
中的项目数。
如果我们通过JetBrains Resharper 查看代码会更加明显:
代码也可以写成:
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;
}
不要错误地认为方法末尾的最后return false
不是必需的,因为它是在keys.Count == 0
当然,更好地格式化代码可以很长时间地揭示第一个return false
是多余的问题并且可以按照un-lucky's answer进行简化: