我正在使用此循环浏览我的数据库,并检查玩家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
}
}
}
答案 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.Count
,o
可以是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
没有明显的原因)。
我希望这能解决你的问题。