创建一个空的点数组
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 次。
我正在尝试创建一个空的点数组,为此我使用了以下内容
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 次。