2D数组作为类属性 - 如何用C#方式创建它们?

时间:2016-11-11 14:14:42

标签: c# arrays class multidimensional-array

我正在尝试创建一个具有二维数组属性的类。数组将在网格上保存各种x,y坐标(例如0,1或3,7),并且数组的大小取决于名为size的类属性。

你会如何在C#中创建这个数组?我已经在下面给出了我的解决方案,但是具有很少的C#经验并且来自具有一些javascript知识的Python背景,感觉就是有更好的解决方案来解决这个问题。

你们其中一个C#巫师可以开导我吗?

提前感谢您的帮助。

这是我的代码:

public class Obj
{
    int Size;  // Defines length of array
    int[,] Pos;

    // constructor
    public Obj(int size)
    {
        this.Size = size;
        this.Pos = new int[size, 2];
    }

    public void set_coord(int index, int x, int y)
    {
        if (index >= this.Size) {
            Console.WriteLine("Catch OutOfRangeException");
        }
        else
        {
            this.Pos[index, 0] = x;
            this.Pos[index, 1] = y;
        }
    }

2 个答案:

答案 0 :(得分:2)

你可以创建一个List而不是一个类,并有一个内部子类来表示你的点。

喜欢这个

    public class Obj{
      int Size;
      List<Point> Pos = new List<Point>();

      public Obj(int size){
        this.Size = size;
      }

      public set_coord(int index, int x, int y){
        if(index >= this.Size){
          Console.Writeline("Catch OutOfRangeException")
        }else{
          this.Pos.Add(new Point(x,y));
        }
      }
    }

    class Point{
      int x = 0;
      int y = 0;
      public Point(int xCor, int yCor){
        this.x = xCor;
        this.y = yCor;
      }
    }

答案 1 :(得分:1)

结构是理想的方法。完全成熟的课程可能没有必要,但这取决于。

https://msdn.microsoft.com/en-us/library/ah19swz4.aspx

public struct Coordinates
{  
    public int coordX;  
    public int coordY;  
} 

然后你班上的财产可以设置如下:

var Obj = new Obj();
List<Coordinates> listOfCoords = new List<Coordinates>();
var coord = new Coordinates();
coord.X = 20;
coord.Y = 15
listOfCoords.Add(coord); 
Obj.Pos = listOfCoords

请记住,Structs不能继承或继承其他类或结构,以及其他一些陷阱。如果您需要这些功能,或者结构中的数据在创建后很容易修改(换句话说,数据不是不可变的),请考虑使用小类。

https://msdn.microsoft.com/en-us/library/0taef578.aspx