好的,我有一个列表,以及存储结构的位置,我需要从最后到第一个检查它们,以检查结构中的一个变量是否为1。代码如下所示:
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开始的。
如果您有修补程序,或者需要更多信息,请留下评论。
发布于 2014-05-04 15:56:25
您的错误是,如果i等于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;
}
}发布于 2014-05-04 15:57:11
您还可以使用LastOrDefault()函数。但是,这里可能有一个问题,因为我们正在寻找Struct。
如果什么都没找到呢?
如果没有发现,LastOrDefault()将返回default(checkpoint)。结构的默认值是结构,其所有值都是默认初始化的。因此,我们必须使用.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。
https://stackoverflow.com/questions/23458302
复制相似问题