Создать пустой массив точек

Я пытаюсь создать пустой массив точек, для этого я использую следующее

    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 раз в массив.

Другие вопросы по тегам