好的,我有一个列表和我存储的结构,我需要从最后一个到第一个,检查结构中的一个变量是否为1.代码如下所示:< / p>
for(int i = (checkpoints.Count - 1); i == 0; i--)
{
if(checkpoints[i].active == 1)
{
playerPositionX = checkpoints[i].xPosition;
playerPositionY = checkpoints[i].yPosition;
camPositionX = checkpoints[i].xPosition;
break;
}
}
这是我使用的结构:
private struct checkpoint
{
public int xPosition;
public int yPosition;
public int active;
}
我需要做的是检查我在列表中存储的结构中变量active是否为== 1。我有大约3-8个结构存储在列表中。我需要从列表中的最后一个结构开始检查,然后按照我的方式进行检查。
当我尝试调试程序时,看起来它不会从最后一个开始,但它从i = 0开始。
如果您有解决方案,或者您需要更多信息,请发表评论。
答案 0 :(得分:2)
您还可以使用LastOrDefault()
功能。但是,这可能是一个问题,因为我们正在搜索Struct
。
如果找不到任何内容?
如果找不到任何内容, LastOrDefault()
将返回default(checkpoint)
。 struct的默认值是struct,其所有值依次默认初始化。因此,我们必须使用.Cast<checkpoint?>
将它们转换为可空。
var activeCheckPoint = checkpoints
.Where(x => x.active == 1)
.Cast<checkpoint?>()
.LastOrDefault();
或者我们必须在第二次检查后返回对象的有效值为1.
var activeCheckPoint = checkpoints.LastOrDefault(x => x.active == 1);
if(actactiveCheckPoint.active == 1)
{
// Then it is Ok
}
else
{
// Nothins was found
}
但是,如果您想使用for
循环,则必须将i == 0
更改为i >= 0
。
答案 1 :(得分:1)
你的错误在于,如果我等于0,那么你说它会绕过循环,当时它不是。您希望循环循环直到 i 大于或等于零。
for(int i = (checkpoints.Count - 1); i >= 0; i--) // your mistake was here
{
if(checkpoints[i].active == 1)
{
playerPositionX = checkpoints[i].xPosition;
playerPositionY = checkpoints[i].yPosition;
camPositionX = checkpoints[i].xPosition;
break;
}
}