C# FindIndex 带参数

C# FindIndex with parameters

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

我有一个 class 的列表,它叫做 AppliedEffects。由 class 生成的列表名为 appliedEffects。 我想访问这个列表并在索引中找到一个特定的值,然后根据该值是否存在于列表中来使 bool 为真或假。它用于加电系统,其中列表是当前活动的所有加电。例如射击子弹的代码,然后将搜索列表中是否有 ID 为 1 的项目,因为这是具有双子弹 powerup 的 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,如果不是,则为假。 我想为 ID 发送一个参数,示例中没有,这样我就可以重用该函数进行其他 ID 检查。但是当我输入参数时,我不知道应该把什么作为appliedEffect(这就是为什么我放XX)。

我也试过这个:

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

哪个不起作用,不知道为什么。我不完全理解.Exists 和.FindIndex 的概念,所以也许这就是我不知道如何使用它的原因。 基本上我只是想检查列表中是否有一个具有特定 ID 的项目,这样游戏就会知道我有特定的能量提升并且可以将 bool 设置为 true 然后再设置为 false。 注意:ID 不是索引,ID 是我的 AppliedEffects class 中的一个整数,它知道它是哪个 powerup。 有点累了,如果有什么thoughts/concerns,请写在跟帖里,我会订阅跟帖

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

FindIndex 的参数是一个 method/lambda,只有一个参数。在这种情况下,将创建一个 lambda,它采用单个参数 ae 和 returns FindAE(ae, 1).

FindAE 方法不是必需的。这样做可能更容易:

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

请注意,如果未找到请求的元素,FindIndex 将 return -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;
}