2017-08-17 18 views
2

私はJavaからC#に切り替えていますが、これが可能かどうか疑問に思っていますか?私がしたいのは、タイプEnum {north, south, east, west}の2次元配列を作成することです。そうすれば、map[1,2].northに電話して、地図上のそのセルが北の壁かどうかを調べることができます。C#でEnumの2D配列を宣言するにはどうすればよいですか?

申し訳ありませんが、原型コードの場合は、現在自分のコンピュータにアクセスできませんので、少し抽象的です。

+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]; 

enumを[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

'Flags'属性は列挙型メンバの値を変更しません。それを使用する場合は、明示的に値を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 
      } 
     } 
    } 
} 
関連する問題