创建一个空的点数组

Create a empty array of points

我正在尝试创建一个空的点数组,为此我使用了以下内容

    Point[] listapontos = new[]; //should create a empty point array for later use but doesn't.
               Point ponto = new Point(); //a no coordinates point for later use
               for (int i = 1; i <= 100; i++) //cycle that would create 100 points, with X and Y coordinates
               {
                   ponto.X = i * 2 + 20;
                   ponto.Y = 20;
                   listapontos[i] = ponto;
               }

我遇到了一些麻烦,因为我无法创建一个空的点数组。我可以使用列表创建一个空的字符串数组,但由于我需要两个元素,因此列表在这里没有用。

有什么提示吗? (也欢迎问题提示)

// should create a empty point array for later use but doesn't.

不,您指定的语法无效。如果你想要一个空数组,你可以使用以下任何一个:

Point[] listapontos = new Point[0];
Point[] listapontos = new Point[] {};
Point[] listapontos = {};

然而,你得到了一个包含 0 个元素的数组,所以这个语句:

listapontos[i] = ponto;

... 然后会抛出异常。听起来您应该使用 List<Point>,或者创建一个大小为 101 的数组:

Point[] listapontos = new Point[101];

(或者创建一个大小为 100 的数组,并更改您使用的索引 - 目前您没有为索引 0 分配任何内容。)

请务必了解,在 .NET 中,数组对象在创建后不会更改其大小。这就是为什么使用 List<T> 通常很方便,它在需要时包装一个数组 "resizing"(通过创建一个新数组并复制值)。

I could create a empty array of strings using a list, but since i will need two elements, a list isn't useful here.

您可以这样定义 class:

public class Point
{
    public double X {get;set;}
    public double Y {get;set;}
}

然后你可以使用 List<Point>:

List<Point> points = new List<Point>();  

points.Add(new Point(){X=10, Y=20});

这不起作用的原因有两个。 首先,当你说

 Point[] listapontos = new[];

您使用的语法无效。应该更像

Point[] listapontos = new Point[100];

现在,其次,当您写入数组时,您永远不会创建新点。 点是一个class,这意味着它是通过引用传递的。这意味着无论何时您写入 Ponto 的地址,而不是新的 Ponto。

相反,你应该做的更像是

for(int i = 0; i < 100; i++)
{
    listapontos[i] = new Point(i * 2 + 20, 20);
}

通过使用 new 关键字,您将在内存中创建一个新点并将该点的地址存储在数组中,而不是将同一点的地址写入数组 100 次。