我正在尝试创建一个具有二维数组属性的类。数组将在网格上保存各种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;
}
}
答案 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不能继承或继承其他类或结构,以及其他一些陷阱。如果您需要这些功能,或者结构中的数据在创建后很容易修改(换句话说,数据不是不可变的),请考虑使用小类。