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

2D数组作为类属性-如何用C#方式创建它们?,c#,arrays,class,multidimensional-array,C#,Arrays,Class,Multidimensional Array,我试图创建一个具有二维数组属性的类。数组将保存网格上的各种x、y坐标(例如0,1或3,7),数组的大小取决于名为size的类属性 您将如何在C#中创建此数组?我在下面给出了我的解决方案,但没有多少C#经验,并且来自Python背景,有一些javascript知识,感觉有更好的解决方案来解决这个问题 请你们中的一个巫师给我点化一下好吗 提前感谢你的帮助 这是我的密码: public class Obj { int Size; // Defines length of array

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

您将如何在C#中创建此数组?我在下面给出了我的解决方案,但没有多少C#经验,并且来自Python背景,有一些javascript知识,感觉有更好的解决方案来解决这个问题

请你们中的一个巫师给我点化一下好吗

提前感谢你的帮助

这是我的密码:

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

您可以创建一个列表而不是类,并拥有一个内部子类来表示您的点

像这样

    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;
      }
    }
公共类Obj{
整数大小;
列表位置=新列表();
公共Obj(整数大小){
这个。大小=大小;
}
公共集合坐标(整数索引,整数x,整数y){
如果(索引>=此.Size){
Console.Writeline(“捕获范围异常”)
}否则{
该位置添加(新点(x,y));
}
}
}
类点{
int x=0;
int y=0;
公共点(int xCor、int yCor){
这个.x=xCor;
y=yCor;
}
}

结构是实现这一点的理想方法。一个完整的类可能不是必需的,但这要视情况而定

类中的属性可以如下设置:

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
var Obj=new Obj();
List LISTOCOORDS=新列表();
var coord=新坐标();
坐标X=20;
坐标Y=15
添加(协调);
Obj.Pos=单词列表
请记住,结构不能从其他类或结构继承,也不能继承其他一些Gotcha。如果您需要这些特性,或者结构中的数据在创建后易于修改(换句话说,数据不是不可变的),则考虑小班。

创建一个同时保存坐标的类,而不是使用数组。例如,您有一个名为
Coordinate
的类,它有两个属性X和Y。然后您将创建坐标的1D数组。仅供参考:在C#中,属性是完全不同的。这里应该使用的术语是字段。另外,看起来您正在创建数组,因此您的问题不清楚。你能详细说明一下吗?你写的代码没有错;这是创建2D数组的方法,但由于您正在存储x,y坐标,您可以创建一个包含
s的1D数组(或者创建您自己的结构来保存x和y值),您可能还想了解C属性和索引,就像他在问最好的解决方案一样,我很确定没有,你的观点似乎是正确的,但我更喜欢卡泽姆·阿克加里先生的做法。首先,非常感谢你的快速回答@KevKong Dennis_E建议的Point类似乎已经存在。像M.kazem Akhgary建议的那样编写自己的坐标类有什么好处?谢谢你的建议。我一直在想为什么会有结构,而类可以完成结构所做的一切,还有更多。。。你知道为什么吗?结构适用于通常不被修改的小型相关属性组。它们不支持继承。它们也是值类型(类是ref类型)。如果您的特殊情况涉及在对象使用过程中更改坐标值,则结构并不理想。我希望对象在某个点更改位置。。。很可能会去上课。。。谢谢你的澄清:)谢谢你的建议!:)与数组相比,使用列表有什么优势?我认为列表是没有预定义最大长度的数组,当您更改其大小时,它们会动态地(正确地)分配内存。这意味着作为开发人员,您不需要担心清理内存。假设您需要一个固定数组?多亏了c#中的IEnumerable原型,您只需执行myList.ToArray()
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