C# 更新所有列表项

C# 更新所有列表项,c#,monogame,C#,Monogame,请注意,我对编程相当陌生 因此,我为游戏中父精灵的所有子精灵(children)创建了一个列表,并创建了另一个列表(childrenSpeed),该列表存储了子精灵(也连接到父精灵)的每个毫秒SperFrame浮点值 问题是:如果我需要更新playerHead(例如)的毫秒sperFrame值,那么我需要键入: playerHead.millisecondsPerFrame = (value); 但我想这样做,以便我可以使用一行代码来更新所有子项的childrenSpeed列表中的所有值 我试

请注意,我对编程相当陌生

因此,我为游戏中父精灵的所有子精灵(children)创建了一个列表,并创建了另一个列表(childrenSpeed),该列表存储了子精灵(也连接到父精灵)的每个毫秒SperFrame浮点值

问题是:如果我需要更新playerHead(例如)的毫秒sperFrame值,那么我需要键入:

playerHead.millisecondsPerFrame = (value);
但我想这样做,以便我可以使用一行代码来更新所有子项的childrenSpeed列表中的所有值

我试着用一个

player.childrenSpeed.ForEach(...)
但我似乎不能让它工作

这是我的LoadContent方法:(PlayerMove中的最后一个浮点值是毫秒sperFrame值)

所以我需要这样的东西:

public override void Update() 
{
    if (player.bool == ...)
    {   
        player.milliSecondsPerFrame = (value);
        // Each element in the player.childrenSpeed list = (value) (same as player)
    }
}

我展示了您可以运行和测试的简化版代码。
Player

class Player
{
    public float milliSecondsPerFrame { get; set; }
    public bool running { get; set; }
    public List<float> childrenSpeed { get; set; }
}
用法

var player=newplayer{running=true,毫秒sperframe=1.5F,childrenSpeed=newlist{2.5F,-3.5F};
更新(播放器,1.25F);//=>毫秒帧=1.25F,子帧速度={1.25F,1.25F}

我展示了您可以运行和测试的简化版代码。
Player

class Player
{
    public float milliSecondsPerFrame { get; set; }
    public bool running { get; set; }
    public List<float> childrenSpeed { get; set; }
}
用法

var player=newplayer{running=true,毫秒sperframe=1.5F,childrenSpeed=newlist{2.5F,-3.5F};
更新(播放器,1.25F);//=>毫秒帧=1.25F,子帧速度={1.25F,1.25F}

它通过在更新方法中使用foreach循环来工作:

public override void Update(GameTime gameTime)
{

    if (player.running == true)
    {
        Console.WriteLine("Lopen");
        player.millisecondsPerFrame = 30;
        // I need my childrenSpeed code for millisecondsPerFrame here
    }

    else if (player.running == false)
    {
        Console.WriteLine("gestopt");
        player.millisecondsPerFrame = 65;
        // I need my childrenSpeed code for millisecondsPerFrame here
    }

    if (player.walking == false)
    {
        // not done yet
    }

    player.Update(gameTime, Game.Window.ClientBounds);
    player.children.ForEach(c => c.Update(gameTime, Game.Window.ClientBounds));
    base.Update(gameTime);
}
foreach (Sprite children in player.children) // player.children is the sprite list
{
    children.millisecondsPerFrame = value; // I assign the millisecondsPerFrame float value
}

但是感谢您的回答。

它通过在更新方法中使用foreach循环来工作:

public override void Update(GameTime gameTime)
{

    if (player.running == true)
    {
        Console.WriteLine("Lopen");
        player.millisecondsPerFrame = 30;
        // I need my childrenSpeed code for millisecondsPerFrame here
    }

    else if (player.running == false)
    {
        Console.WriteLine("gestopt");
        player.millisecondsPerFrame = 65;
        // I need my childrenSpeed code for millisecondsPerFrame here
    }

    if (player.walking == false)
    {
        // not done yet
    }

    player.Update(gameTime, Game.Window.ClientBounds);
    player.children.ForEach(c => c.Update(gameTime, Game.Window.ClientBounds));
    base.Update(gameTime);
}
foreach (Sprite children in player.children) // player.children is the sprite list
{
    children.millisecondsPerFrame = value; // I assign the millisecondsPerFrame float value
}

但是谢谢你的回答。

你可以使用
player.childrenSpeed=player.childrenSpeed.Select(s=>value.ToList()player.childrenSpeed=player.childrenSpeed.Select(s=>value.ToList()我用console.WriteLine检查了这一点,列表的值实际上发生了变化,但playerHead(playerHead.millissecondsPerFrame)的值没有变化(我可以看到这一点,因为playerHead的移动与我使用的console.WriteLine相同。)这是因为.ToList()吗;实际创建一个新列表?为什么要
int
?在最初的问题中,您提到的值是
float
!如果需要
int
,可以将类型和值更改为int。除此之外,上面的代码工作正常。是的,正如我在回答中已经指出的,
ToList()
实际上创建了一个新列表。对于所有的问题,很抱歉,列表会更改值,但playerHead(最初添加到childrenSpeed列表中)的浮点值不会。。。因此,您的代码示例可以工作,但我想要更改的原始值(使用列表)没有更改。仅使用新值创建了一个新列表。感谢您的回复。我会尽我所能试试这个!直到我将其更改为:.ToList();->我用console.WriteLine检查了这一点,列表的值实际上发生了变化,但playerHead(playerHead.millissecondsPerFrame)的值没有变化(我可以看到这一点,因为playerHead的移动与我使用的console.WriteLine相同。)这是因为.ToList()吗;实际创建一个新列表?为什么要
int
?在最初的问题中,您提到的值是
float
!如果需要
int
,可以将类型和值更改为int。除此之外,上面的代码工作正常。是的,正如我在回答中已经指出的,
ToList()
实际上创建了一个新列表。对于所有的问题,很抱歉,列表会更改值,但playerHead(最初添加到childrenSpeed列表中)的浮点值不会。。。因此,您的代码示例可以工作,但我的原始