浏览带有for循环的列表

时间:2014-05-04 15:55:06

标签: c# list struct

好的,我有一个列表和我存储的结构,我需要从最后一个到第一个,检查结构中的一个变量是否为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开始。

如果您有解决方案,或者您需要更多信息,请发表评论。

2 个答案:

答案 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;
    }
}