我正在尝试创建一个空的数组点,因为我正在使用以下
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;
}
我遇到了一些麻烦,因为我无法创建一个空数组。我可以使用列表创建一个空的字符串数组,但由于我需要两个元素,因此列表在这里没用。
任何提示? (也欢迎提出问题的提示)
答案 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>