带参数

时间:2015-08-11 14:05:16

标签: c# list find exists

我目前正在修补我最近发布的游戏。

我有一个类的列表,名为AppliedEffects。从该类创建的列表名为appliedEffects。 我想访问此列表并在索引中查找特定值,然后根据列表中是否存在该值来使bool为true或false。它适用于上电系统,其中列表是当前活动的所有上电。例如,射击子弹的代码将搜索列表中是否有ID为1的项目,因为这是双子弹启动的ID。

我走到这一步,只有一个小问题:

int ndx = PlayerStatus.appliedEffects.FindIndex(PlayerStatus.FindAE(XX,1);

XX在哪里,我不知道该放什么。我编辑了这个:

int ndx = Books.FindIndex(FindComputer);
private static bool FindComputer(Book bk)
{
    if (bk.Genre == "Computer")
    {
        return true;
    }
    else
    {
        return false;
    }
}

因为在代码示例中,我无法发送我想要搜索的参数。编辑后的代码如下所示:

public static bool FindAE(AppliedEffects ae, int id)
{
    if (ae.id == id)
    {
        return true;
    }
    else
    {
        return false;
    }
}

我创建一个int,它将获取列表的索引,其中值为ID 1的项存在,然后如果该值为1,因为ID为1,它将bool设置为true,并且为false如果不。 我想发送ID的参数,示例没有,这样我就可以重用该函数进行其他ID检查。但是当我输入参数时,我不知道应该放什么作为appliedEffect(这就是我放XX的原因)。

我也试过这个:

if (PlayerStatus.appliedEffects.Exists(x => x.id == 1))
{
     PlayerStatus.doubleBullets = true;
}

哪个不起作用,不知道为什么。我不完全理解.Exists和.FindIndex的概念,所以也许这就是为什么我不知道如何使用它。 基本上我只是希望能够检查列表中是否有一个具有特定ID的项目,这样游戏就会知道我有特定的启动并且可以将bool设置为true然后设置为false。 注意:ID不是索引,ID是我的AppliedEffects类中的int,它知道它是哪个powerup。 我有点累,所以如果有任何想法/疑虑,请写在主题中,我会订阅该主题。

2 个答案:

答案 0 :(得分:0)

int ndx = PlayerStatus.appliedEffects.FindIndex(ae => PlayerStatus.FindAE(ae, 1));

FindIndex的参数是一个带有一个参数的方法/ lambda。在这种情况下,创建一个lambda,它接受一个参数ae,并返回FindAE(ae, 1)

不需要FindAE方法。这可能更容易:

int ndx = PlayerStatus.appliedEffects.FindIndex(ae => ae.index == 1);

答案 1 :(得分:0)

请注意,如果找不到请求的元素,FindIndex将返回-1。因此,你必须这样做:

if(PlayerStatus.appliedEffects.FindIndex(ae => PlayerStatus.FindAE(ae, 1)) != -1)
{
    PlayerStatus.doubleBullets = true;
}

在你的情况下使用Exists可能更有意义,就像你提到的那样。试试这个:

if(PlayerStatus.appliedEffects.Exists(ae => PlayerStatus.FindAE(ae, 1)))
{
    PlayerStatus.doubleBullets = true;
}