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;
}
我目前正在修补我最近发布的游戏。
我有一个 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;
}