如何为我的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;
}