Если у меня есть класс Ball
с set
аксессором для своей собственности radius
, я могу установить радиус список Ball
объектов с использованием foreach
цикла :Как изменить значение примитивного переменного типа данных, на который ссылается Еогеасп итератор
foreach(Ball ball in balls)
{
ball.radius = 1;
}
Но если я перебор коллекции примитивных типов данных, это не работает, потому что примитив не аксессоры. Если я пытаюсь изменить значение примитивного типа данных, я на самом деле выполнения операции итератора, не ценить себя, так что следующее не работает:
foreach(double radius in radii)
{
radius = 1;
}
Я попытался решить ее с указателем, как это:
double* p;
foreach(double radius in radii)
{
p = &radius;
*p = 1;
}
Неудивительно, что это не работает, потому что p
относится к адресу занимаемого итератора, а не переменной.
В случае, если это важно здесь, я буду более конкретно о том, что я на самом деле пытается сделать, и хотя я бы до сих пор, как ответ на мой главный вопрос, это вполне возможно, что существует гораздо проще способ сделать это с помощью методов List<>
, с которыми я не знаком. У меня есть List<List<double>>
, который я хочу изменить каждый элемент, в частности путем деления каждой на константу нормализации normalisationFactor
. Следующие работает отлично:
for (int i = 0; i < array.Count; i++)
{
for (int j = 0; j < array[0].Count; j++)
{
array[i][j] /= normalisationFactor;
}
}
Однако, я считаю, что синтаксис foreach
гораздо более удобным для чтения, и хотел бы, чтобы это таким образом, если я могу. По причинам, которые я подробно выше, ниже не работает:
foreach (List<double> row in array)
{
foreach (double value in row)
{
value /= normalisationFactor;
}
}
Итак, как же я добиться того, что я хочу, используя foreach
цикл?
Хорошо, так это выглядит, как мое решение (в моем предпоследнем блоке кода) является самым простым тогда. Я подожду, чтобы узнать, дает ли кто-нибудь другой ответ, прежде чем принимать его. Приветствия. – BZ1