Расширение на 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
является излишним и может быть упрощен за un-lucky's answer:
Если ваш 'keys' содержит более 1 ключа, он будет возвращен после первой итерации и никогда не найдет нужный вам ключ. Попробуйте удалить else в вашем цикле for, например. 'for (int i = 0; i
Просто обратите внимание, зачем вам цикл, если вы оцениваете только первое значение? контроль будет возвращен вызывающему абоненту после первой оценки независимо от соответствия ключа. –