Непонятно для цикла C # - PullRequest
3 голосов
/ 29 января 2012

Я использую этот цикл, чтобы просмотреть мою базу данных и проверить, совпадает ли поле Club игроков с переменной clubAway. При заявлении if он "сходит с ума".

База = набор данных

Игроки = таблица в базе данных

Club = int field

int clubAway

Я проверил значения с окном сообщений, и он говорит, например: Club = 1 и IDclub = 2 .. Но он все равно входит в оператор if. У меня точно такой же цикл, с той разницей, что clubAway - это clubHome, и он отлично работает.

for (int o = 0; o <= 10; o++)
{
    for (int p = 1; p <= Baza.Players.Count; p++)
    {
        if (Baza.Players[p - 1 + o].Club == clubAway.IDclub)
        {//do something
        }
    }
}

Ответы [ 4 ]

4 голосов
/ 29 января 2012

Мне не совсем ясно, с целью o, но, возможно, этот код установит вам путь лучше :

var players = Baza.Players.Where(player => player.Club == clubAway.IDclub).Take(11);

    foreach(var p in players){
        //do something with p
    }

ОБНОВЛЕНИЕ

ВЧитая комментарии ниже исходного поста, я делаю вывод, что вы просто пытаетесь найти первый экземпляр в наборе, который соответствует значению clubAway.Если это правильно, то один из этих фрагментов кода будет более подходящим (в зависимости от ваших бизнес-правил):

var player = Baza.Players.FirstOrDefault(player => player.Club == clubAway.IDclub);

ИЛИ

var players = Baza.Players;
foreach(var _player in players){
     var player = _player.FirstOrDefault(p=> p.Club == clubAway.IDclub);
     //Now do something with player.
}

Это будетвернуть сущность "игрок".Чтобы использовать его, вы должны сделать это (например):

var playerTeamName = player.teamName;

Конечно, я не знаю вашей фактической модели, поэтому ваш код будет выглядетьотличается, но будет следовать этому шаблону.

Удачи!

2 голосов
/ 29 января 2012

Проблема в том, что у вас есть доступ к недопустимому элементу в коллекции.Последний действительный индекс в Baza.Players равен Baza.Players.Count - 1, но вы используете p - 1 + o.В этом случае p может равняться Baza.Players.Count, а o может составлять 10.

Вам необходимо изменить условие защиты в цикле for.

for (int p = 1; p - 1 + o < Baza.Players.Count; p++)
0 голосов
/ 29 января 2012

Что-то не так в логике вашего цикла.

Допустим, что сначала o = 0 и p = 1 (первая итерация первого цикла и первая итерация второго цикла), затем p-1+oравно 0, тогда o = 0 и p = 2 (первая итерация первого цикла и вторая из второго цикла), а p-1+o равно 1. Однако позже, когда o = 1 (вторая итерация первого цикла) и p = 1(первая итерация второго цикла), затем p-1+o снова равно 1, так что вы действительно выполняете задание с тем же элементом (Baza.Players[1] без видимой причины).

Надеюсь, это решит вашу проблемупроблема.

0 голосов
/ 29 января 2012

Скорее всего, ваш код не компилируется правильно, и вы используете 'последнюю хорошую версию'.В меню «Сборка» выберите «Очистить», затем повторите попытку.

Я предполагаю, что исходный код двоичного файла, к которому подключается отладчик, не совпадает с кодом, который вы видите в своей IDE.Это может произойти, если вы выберете «Запустить последнюю хорошую версию» при запуске отладки или если вы подключитесь к уже запущенному процессу, запущенному из папки, отличной от выходной папки вашей сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...