如何在C#中声明枚举的2D数组?

时间:2017-08-17 19:12:18

标签: c# arrays enums

我正在从Java切换到C#,我想知道这是否可行?我想要做的是创建一个Enum {north, south, east, west}类型的二维数组。这样我就可以调用map[1,2].north来查明地图上的那个单元格是否有北墙。

很抱歉粗略的代码,我暂时无法访问我的电脑,所以我有点抽象。

3 个答案:

答案 0 :(得分:3)

对于枚举:

enum Dirs { North, South, East, West }

只需将数组声明为:

Dirs[,] dirs = new Dirs[10, 10];

如果您需要每个单元格都能够有多个墙,请使用[Flags]属性标记枚举,并使值为2的幂:

[Flags]
enum Dirs { North = 1 << 0, South = 1 << 1, East = 1 << 2, West = 1 << 3 }

因此,您可以设置,例如:

dirs[1, 2] = Dirs.North | Dirs.East;

正如评论中提到的@ Scott Chamberlain - 检查你可以做的方向:

bool hasNorthWall = dirs[1, 2].HasFlag(Dirs.North);

答案 1 :(得分:0)

试试:

private EnumName[,] arrayName; 

答案 2 :(得分:0)

这是使用enum声明和测试墙的方法。

namespace ConsoleApplication1
{
    [Flags]
    enum Wall
    {
        North = 1,
        South = 2,
        East  = 4,
        West  = 8
    }
    static class Program
    {
        static void Main(string[] args)
        {
            int grid = 10;
            var map=new Wall[grid, grid];
            // fill in values here ...
            if(map[1, 2].HasFlag(Wall.North))
            {
                // cell (2, 3) has a wall in the north direction
            }
        }
    }
}