我正在从Java切换到C#,我想知道这是否可能?我想要做的是创建一个Enum {north, south, east, west}
类型的二维数组。通过这种方式,我可以拨打map[1,2].north
以查明地图上的单元格是否有北墙。如何在C#中声明Enum的二维数组?
对不起,粗略的代码,我目前没有访问我的电脑,所以我有点抽象。
我正在从Java切换到C#,我想知道这是否可能?我想要做的是创建一个Enum {north, south, east, west}
类型的二维数组。通过这种方式,我可以拨打map[1,2].north
以查明地图上的单元格是否有北墙。如何在C#中声明Enum的二维数组?
对不起,粗略的代码,我目前没有访问我的电脑,所以我有点抽象。
尝试:
private EnumName[,] arrayName;
对于枚举:
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);
这就是你如何使用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
}
}
}
}
单元格是否可以有多个墙? – ja72
既然你来自Java,你可能想知道C#中的'enums' [比较弱](https://stackoverflow.com/a/1376455/3927)。 –