2017-08-17 165 views
2

我正在从Java切换到C#,我想知道这是否可能?我想要做的是创建一个Enum {north, south, east, west}类型的二维数组。通过这种方式,我可以拨打map[1,2].north以查明地图上的单元格是否有北墙。如何在C#中声明Enum的二维数组?

对不起,粗略的代码,我目前没有访问我的电脑,所以我有点抽象。

+0

单元格是否可以有多个墙? – ja72

+0

既然你来自Java,你可能想知道C#中的'enums' [比较弱](https://stackoverflow.com/a/1376455/3927)。 –

回答

0

尝试:

private EnumName[,] arrayName; 
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); 
+2

“标志”属性不会更改枚举成员的值。如果你使用它,你需要明确地将这些值设置为2的幂,否则最终会出现一些不受欢迎的行为。 – Kyle

+0

@Kyle的确,谢谢。 – Dmitry

+1

要完成,检查一个方向,你可以做'var hasNorthWall = dirs [1,2] .HasFlag(Dirs.North);' –

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 
      } 
     } 
    } 
}