困惑于循环C#

时间:2012-01-29 17:08:41

标签: c# for-loop

我正在使用此循环浏览我的数据库,并检查玩家Club字段是否与clubAway变量匹配。在if语句中它“去berzerk”。

Baza =数据集

玩家=数据库中的表

Club = int field

int clubAway

我已经使用messagebox检查了这些值,例如: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 个答案:

答案 0 :(得分:4)

我不清楚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;

当然,我不了解您的实际模型,因此您的代码看起来会有所不同,但会遵循该模式。

祝你好运!

答案 1 :(得分:2)

问题是你正在访问集合中的非法元素。 Baza.Players的最后一个有效索引是Baza.Players.Count - 1,但您使用的是p - 1 + o。在这种情况下,p可以等于Baza.Players.Counto可以是10

您需要更改for循环中的保护条件。

for (int p = 1; p - 1 + o < Baza.Players.Count; p++)

答案 2 :(得分:0)

您的代码可能无法正确编译,并且您正在运行“最后一个好的版本”。从Build菜单中选择“Clean”,然后重试。

我猜测调试器连接到的二进制文件的源代码与您在IDE中看到的代码不同。如果在开始调试时选择“运行上一个正常版本”,或者附加到从构建输出文件夹以外的位置启动的已在运行的进程,则会发生这种情况。

答案 3 :(得分:0)

你的循环逻辑有问题。

假设最初o = 0且p = 1(第一次循环的第一次迭代和第二次循环的第一次迭代),则p-1+o等于0,则o = 0且p = 2(第一次迭代)第一个循环和第二个循环的第二个循环)和p-1+o等于1.但是后来当o = 1(第一个循环的第二次迭代)和p = 1(第二个循环的第一次迭代),然后{{ 1}}再次等于1,所以你真的在同一个项目上执行任务(p-1+o没有明显的原因)。

我希望这能解决你的问题。