Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Проблема с foreach


Автор: BoomeR 14.10.2007, 21:30
В следующем коде :

Код

private void Turn (double a,Point []Verge, char mode)
{
if (Char.Equals (mode,'z'))
foreach (Point p in Verge)
{
      p.X = ((int)(p.X*System.Math.Cos(a)+p.Y*System.Math.Sin(a)+0.5));
      p.Y = ((int)(p.Y*System.Math.Cos(a)-p.X*System.Math.Sin(a)+0.5));
}
}


Выдаёт ошибку : The left-hand side of an assignment must be a variable, property or indexer. (Ругаеться на p.X и p.Y в левых частях)

Автор: QryStaL 14.10.2007, 21:54
У меня выдаёт следующее:

Cannot modify members of 'p' because it is a 'foreach iteration variable'

Используй конструкцию for

Автор: Bogdan1024 15.10.2007, 15:46
Point - это структура, тоесть если ты изменишь в цикле for each её значение, то оно не сохранится у тебя в твоём массиве Verge потому что в переменной p хранится не ссылка на объект, а его значение!
Потому таки да, нужно юзать for.

Автор: 1stain 15.10.2007, 15:55
Цитата(Bogdan1024 @  15.10.2007,  15:46 Найти цитируемый пост)
Point - это структура, тоесть если ты изменишь в цикле for each её значение, то оно не сохранится у тебя в твоём массиве Verge потому что в переменной p хранится не ссылка на объект, а его значение!

Срочно прими жаропонижающее - ибо ты бредишь. Да, любой массив размещается в куче, но если массив создаецца через [] и содержит ValueType элементы, то они неупаковываюцца. (если очень хочецца, то массив значимых типов можно разместить и в стеке)
Как сказал QryStaL
Цитата(QryStaL @  14.10.2007,  21:54 Найти цитируемый пост)
Используй конструкцию for

так как foreach проходит массив посредством IEnumerator, который не позволяет редактировать текущий элемент.

Автор: archeg 15.10.2007, 18:42
Вы про что? оО

foreach можно приблизительно рассписать так:
Код

IEnumerator it = arr.GetEnumerator();
while (it.MoveNext())
{
   Element el = (Element) it.Current;
   //....
}


Current в IEnumerator - свойство только для чтения:
Код

{ get;}

Так что:
Цитата(1stain @  15.10.2007,  15:55 Найти цитируемый пост)
так как foreach проходит массив посредством IEnumerator, который не позволяет редактировать текущий элемент.

В точку.

Автор: iad 15.10.2007, 18:55
Цитата(1stain @  15.10.2007,  16:55 Найти цитируемый пост)
Срочно прими жаропонижающее

Пошел вон, не занаешь - заткнись
Цитата(QryStaL @  14.10.2007,  22:54 Найти цитируемый пост)
Используй конструкцию for
 smile 

Автор: 1stain 15.10.2007, 19:20
iad, выпей йаду  smile 

Автор: ivashkanet 15.10.2007, 19:52
Цитата(iad @  15.10.2007,  18:55 Найти цитируемый пост)
Пошел вон, не занаешь - заткнись
Цитата(1stain @  15.10.2007,  19:20 Найти цитируемый пост)
iad, выпей йаду

Ведем себя прилично!!!!!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)