Расширяя ответ jdphenix, я думаю, нам нужно понять, почему ваш цикл "оценивает один раз", и только тогда мы сможем понять, почему существует "недоступный код".
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
является избыточным и может быть упрощен в соответствии с ответ неудачника:
person
MickyD
schedule
26.08.2016
keys
содержит более 1 ключа, он вернется после первой итерации и никогда не найдет нужный ключ внутри. Попробуйте удалить else в цикле for, например. толькоfor (int i = 0; i < keys.Count; i++) if (keys[i].key == key && keys[i].pressed) return true;
. - person Keyur PATEL   schedule 26.08.2016