【问题标题】:Getting element of enum in array获取数组中的枚举元素
【发布时间】: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


【解决方案1】:

如果您正在寻找一种遍历单元格数组的方法,您可以这样做:

int oi, ii;
for (oi = 0; oi <= cells.GetUpperBound(0); ++oi)
{
    for (ii = 0; ii <= cells.GetUpperBound(1); ++ii)
    {
        System.Diagnostics.Debug.WriteLine(
            "Checking: " + oi + "," + ii + " : " + cells[oi, ii].ToString()
        );
    }
}

然后您可以保存对符合您所需值的单元格[oi, ii] 内容的引用列表。

【讨论】:

  • 很好的答案,正是我想做的。谢谢。
猜你喜欢
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多