は、私たちはなぜあなたのループを理解する必要があると思います「は一度と評価されます」というメッセージが表示され、「到達不能なコード」がある理由を理解することができます。
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
を返します。最終結果は、多くの場合、ループの1サイクルが実行され、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;
}
:
![enter image description here](https://i.stack.imgur.com/OJlXg.png)
コードも同様のように書くことができます。最後のreturn false
は、シナリオ中であるため、このメソッドの最後にある必要はありません。keys.Count == 0
0もちろん
![enter image description here](https://i.stack.imgur.com/rwtx7.png)
、もう少しきれいにコードをフォーマットすると、最初のreturn false
が冗長であるとun-lucky's answerあたりのように単純化することができないという問題を明らかに長い道のりを行く:
![enter image description here](https://i.stack.imgur.com/qgACs.png)
あなたの場合を'keys'は2つ以上のキーを含み、最初の繰り返しの後に戻り、あなたの望むキーを決して見つけません。 forループのelseを削除してみてください。 (keys [i] .key == key && keys [i] .pressed) がtrueを返すならば、 'for(int i = 0; i
最初の値だけを評価しているのであれば、なぜループが必要なのでしょうか?キーの一致にかかわらず、最初の評価後にコントロールが呼び出し元に返されます。 –