创建一个空的点数组

时间:2015-04-01 04:21:11

标签: c# arrays 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;
               }

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

任何提示? (也欢迎提出问题的提示)

3 个答案:

答案 0 :(得分:5)

  

//应该创建一个空点数组供以后使用,但不会。

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

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>来代替它的常常方便,它包装了一个数组,&#34;调整大小&#34; (在需要时通过创建新数组并复制值)。

答案 1 :(得分:2)

  

我可以使用列表创建一个空字符串数组,但是因为我会   需要两个元素,列表在这里没用。

您可以像这样定义一个类:

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

答案 2 :(得分:1)

这不起作用的原因是2倍。 首先,当你说

 Point[] listapontos = new[];

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

Point[] listapontos = new Point[100];

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

相反,你应该做的更像是

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

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