Создать пустой массив точек
Я пытаюсь создать пустой массив точек, для этого я использую следующее
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 ответа
// должен создать пустой массив точек для дальнейшего использования, но не создает.
Нет, то, что вы указали, просто неверный синтаксис. Если вы хотите пустой массив, вы можете использовать любой из:
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>
вместо этого, который оборачивает массив, "изменяя размер" (создавая новый массив и копируя значения), когда это необходимо.
Я мог бы создать пустой массив строк, используя список, но так как мне понадобятся два элемента, список здесь не полезен.
Вы можете определить класс следующим образом:
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 раза. Во-первых, когда вы говорите
Point[] listapontos = new[];
вы используете неверный синтаксис. Это должно быть больше похоже на
Point[] listapontos = new Point[100];
Теперь, во-вторых, когда вы пишете в массив, вы никогда не создаете новую точку. Точка - это класс, что означает, что он передается по ссылке. Это означает, что всякий раз, когда вы пишете адрес Понто, но не новый Понто.
Вместо этого вы должны сделать что-то более похожее
for(int i = 0; i < 100; i++)
{
listapontos[i] = new Point(i * 2 + 20, 20);
}
Используя new
ключевое слово, вы создаете новую точку в памяти и сохраняете адрес этой точки в массиве, вместо того, чтобы записывать адрес в одну и ту же точку 100 раз в массив.