2017-08-17 169 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 
      } 
     } 
    } 
}