【发布时间】:2012-10-31 14:30:41
【问题描述】:
我需要弄清楚如何在数组中的枚举上获取元素。 基本上,我有一个 9x9 按钮网格。我有两个包含这些值的多维数组。一个包含他们的名字(如果名字是 43),这意味着 5 向下,4 横(因为它们从 0 开始)。该名称也与数组中自身的 ELEMENT 相同。
string[,] playingField = new string[9, 9];
enum CellType { Empty, Flag, Hidden, Bomb }
CellType[,] cells = new CellType[9, 9];
按钮的名称保存在 playField 中。
每个单元格的状态都保存在单元格中(如果它是空的,有炸弹等)
感谢 AbdElRaheim 提供上述内容。我这样做的原因是我可以获得一个按钮名称(与元素名称完全相同),这在两个数组中都是相同的。
例如:我可以这样做:
string dim1 = Convert.ToString(btn.Name[0]);
string dim2 = Convert.ToString(btn.Name[1]);
if (cells[Convert.ToInt32(dim1), Convert.ToInt32(dim2)] == CellType.Bomb)
(请原谅我糟糕的转换。我稍后会修复它;))上面的功能是让我查看您单击的单元格下方是否有炸弹。
但是,我现在需要做的,基本上与此相反。在上面我知道我想比较它的元素名称,因为元素名称与按钮名称相同。但是,现在我需要做什么是通过获取cells 中所有Bomb 元素的元素来查找元素名称(按钮名称)。
我不知道该怎么做,我试过了:
foreach (CellType Bomb in cells)
{
但它什么也没做。我需要在“单元格”中找到所有“炸弹”并返回元素名称。这样我就可以使用该元素名称,将其转换为字符串,然后使用我的StringToButton 方法创建对按钮的引用。
这是我目前正在这样做的方式,仅供参考,并帮助您更好地理解,但请注意这不是我想要继续这样做的方式。我想按照我上面询问的方式来做:)
foreach (string i in minedNodes)
{
Button buttonName = StringToButton(Convert.ToString(i));
buttonName.Image = new Bitmap(dir + "mine.png");
}
谢谢!
【问题讨论】:
-
为什么要保留两个不同的数组?创建一个项目模型并创建这个模型的数组不是更好吗? “但它什么也没做”是什么意思?
-
我正在清理我的代码,并且在我的上一个问题中,我得到了使用具有枚举 Celltype 的“单元格”数组的想法,并且我有了第一个数组预先。我可以将两者结合起来。
playingField包含按钮名称,cells包含按钮状态。我不确定是否可以将它们结合起来。但我认为它可能是。您能否详细说明“项目模型”的含义?谢谢。 -
我的意思是你可以创建一个具有按钮名称和单元格类型的类,并制作一个此类的数组
-
@AmiramKorach 我不知道为什么你认为创建一个类数组比 2 个数组更好?在许多情况下,它会使用更多的内存并且比保留两个数组的性能更差。
-
@AresAvatar,我认为 9*9 数组不会消耗这么多内存。他应该只考虑简单性。
标签: c# for-loop enums foreach minesweeper