массив foreach перезаписывается (новичок) - PullRequest
2 голосов
/ 28 мая 2011

Следующий фрагмент кода,

foreach (var trksegg in trk.Segs)
        { 
        double lon = Convert.ToDouble(trksegg.Longitude);
        double lat = Convert.ToDouble(trksegg.Latitude);
        double[,] lonlat = { { lon, lat } };

Похоже, что он продолжает перезаписывать мой массив lonlat, поэтому массив никогда не становится больше значения [0,0] lon и значения [0,1] lat.

Вероятно, это вопрос для начинающих (я новичок и не могу понять), но как мне заполнить массив несколькими значениями?Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 28 мая 2011

просто поместите объявление массива вне цикла

double[,] lonlat = new double[trk.Segs.Length, 2];
for (int i=0; i<trk.Segs.Length; i++) {
    lonlat[i,0] = Convert.ToDouble(trk.Segs[i].Longitude);
    lonlat[i,1] = Convert.ToDouble(trk.Segs[i].Latitude);
}

также есть одна маленькая ошибка: у массива нет метода Add, он поддерживает только индексированный доступ, поэтому, если вы напишите

arr = { { lon, lat } }

в цикле, он всегда будет переназначать новый массив вашей переменной, так что это также не имеет смысла.в моем примере lon и lat добавляются через индексы

0 голосов
/ 28 мая 2011

Переменная lonlat является локальной для вашего цикла foreach: содержащийся в ней массив воссоздается в каждой итерации.

Массивы в C # не могут быть увеличены.Вы можете предварительно выделить массив, как это делает @Mikant, или вы можете накапливать результаты в List<T>, или вы можете использовать LINQ:

var lonlats = trk.Segs.Select(
    trksegg => new[] {
        Convert.ToDouble(trksegg.Longitude),
        Convert.ToDouble(trksegg.Latitude)
    }).ToArray();
0 голосов
/ 28 мая 2011

Вы объявили массив внутри цикла foreach, поэтому он будет создавать новый для каждой итерации цикла.Вы должны объявить это вне цикла и использовать его внутри, тогда вы получите то, что хотите.

Итак:

double[,] lonlat;

foreach(var trsksegg in trk.Segs)
{
    lonlat = { { lon, lat } };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...