如何为我的2D自定义对象数组制作我自己的“foreach”或类似内容?

c#

我有一个类 ( Biome),其中包含自定义对象 ( Level)的二维数组。我经常想遍历所有(或部分)级别并执行一些操作,例如设置它们的颜色属性。

与其一遍又一遍地编写相同的嵌套 for 循环,我可以制作自己的方法来让我做类似的事情:ForEachLevel(SetColour())SetColour()我的Biome类中哪里有一个方法,它只是将 Level 的颜色属性设置为某个随机值或使用基于Biome.

所以而不是:

for (int r = 0; d < Rows; r++)
{
    for (int c = 0; l < Cols; c++)
    {
        if (some logic here)
            Levels[r, c].Colour = Color.Red;
        else
            Levels[r, c].Colour = Color.Green;
    }
}

我可以做这样的事情:

ForEachLevel(SetColour(--what goes here?--));

void SetColour(Level level){
    if (some logic here)
        level.Colour = Color.Red;
    else
        level.Colour = Color.Green;
}

或者更好的是,我想做一些类似的东西,它只在 X 行到 Y 行上运行一个函数。

正如您从我的示例中看到的,我什至不知道如何将每个 Level 实例的上下文放入 SetColour 函数中。

我可以继续复制/粘贴我的自定义嵌套 for 循环来实现我想要的,但我希望有更多经验的人能够理解我正在尝试做的事情,并指出我如何使用正确的方向更好的 C# 技术。

因为我一直含糊不清,所以如果不能给出具体答案,我理解,但是对于进一步研究的一些关键概念将不胜感激!!谢谢

EDIT2实际上,之前的尝试根本不起作用。我忘了我需要在其他地方实际调用 ForEachLevel。仍在努力。

private void SomeOtherMethod()
{
    // where I want to actually use the ForEachLevel()
    ForEachLevel(SetLevelColor(--Level??--, Color.red));
}
private void ForEachLevel(Action DoAThing)
{
    for (int d = 0; d < Depths; d++)
    {
        for (int l = 0; l < Lanes; l++)
        {
            DoAThing();
        }
    }
}
private void SetLevelColor(Level level, Color color)
{
    // trivial example
    level.Color = color;
}

以上是如何为我的2D自定义对象数组制作我自己的“foreach”或类似内容?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>