2015-04-01 2 views
0

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

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

@Mathemats: Нет, это не так. 'ponto' не является массивом вообще в этом случае ... –

ответ

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>, который обертывает массив, «изменяя размер» (создавая новый массив и копируя значения), когда это необходимо.

+0

Так что я мог бы создать« Список »точек, так же легко, как и строки? – ng80092b

+0

@ ng80092b: Абсолютно ... это просто другой тип .. –

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

Очень приятно, спасибо – ng80092b

+0

@ ng80092b рад быть полезным –

1

Причина этого не работает в 2 раза. Во-первых, когда вы говорите

Point[] listapontos = new[]; 

вы используете неверный синтаксис. Это должно быть больше как

Point[] listapontos = new Point[100]; 

Теперь, во-вторых, когда вы пишете в массив, вы никогда не создает новую точку. Точка класс, что означает, что оно передано по ссылке. Это означает, что всякий раз, когда вы пишете адрес Понто, но не новый Ponto.

Вместо того, что вы должны сделать, это нечто большее, как

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

Используя new ключевое слово, вы создаете новую точку в памяти и хранения адрес этой точки в массиве, вместо того, чтобы писать адрес на то же самое в 100 раз в массив.

Смежные вопросы