Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В цикле не изменяет значения. 
V
    Опции темы
MasterOfCode
Дата 28.4.2008, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 2
Всего: 27




Код

cLine line;
List<cLine> lines = new List<cLine>();
//заполняю lines
foreach (string readLine in header)
{
    lines.Add(new cLine(readLine));
}
int index = 0;
//меняю местами значения.
foreach (cLine line in lines)
{
    if (line.Name != "STRT" && line.Name != "STOP")
    {
        lines[index].Value = line.Сomments; //не меняет значения - lines[index].Value
        lines[index].Сomments = line.Value; //не меняет значения - lines[index].Сomments 
    }
    index++;
}

- кусок кода в программе.

кусок кода в классе:

Код

class cLine
{

//...

    public string Value
    {
        get { return this.value; }
        set { this.value = Value; }
    }
    public string Сomments
    { 
        get { return this.comments; }
        set { this.comments = Сomments; }
    }

//...

}


почему-то не меняет значения в цикле? Почему?


--------------------
user posted image
PM ICQ   Вверх
mr.DUDA
Дата 28.4.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Код
    public string Value
    {
        get { return this.value; }
        set { this.value = Value; } // <---------- вот тут ошибка !!!!!!!!!!!
    }
    public string Сomments
    { 
        get { return this.comments; }
        set { this.comments = Сomments; } // <---------- и здесь такая же !!!!!!!!!!!
    }

В чём именно ошибка, сказать?  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
fantast
Дата 28.4.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: нет
Всего: 2



index у тебя начинается с 0, и foreach'ем ты идешь с первого элемента, тоесть вот в этих строках
Код

lines[index].Value = line.Сomments;
lines[index].Сomments = line.Value;

lines[index] и есть line, и ты сначала Сomments записываешь в Value, а потом новое значение Value опять записываешь в Сomments, логики тут нет это точно, потому что этим ты делаешь так, чтобы значение Сomments лежало еще и в Value; если ты этим хотел поменять значения местами то делай это через 3юю переменную, а если хотел чтоб Value равнялся Сomments, то вторая строка лишняя

возможго из-за этого

Добавлено через 1 минуту и 16 секунд
и судя по всему ты хотел внести 
Код

index++;

эту строку в тело цикла
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
mr.DUDA
Дата 28.4.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Там не только этот баг, есть ещё один. Раз уж никто не нашёл ошибку, объясняю:
Код
    public string Value
    {
        get { return this.value; }
        set { this.value = Value; }
    }

    public string Сomments
    { 
        get { return this.comments; }
        set { this.comments = Сomments; }
    }


заменяем на:
Код
    public string Value
    {
        get { return this.value; }
        set { this.value = value; }
    }

    public string Сomments
    { 
        get { return this.comments; }
        set { this.comments = value; }
    }



Собственно, сеттер свойств принимает новое значение через ключевое слово value, а в первоначальном коде свойству переприсваивалось его же значение (имя свойства с большой буквы).


--------------------
user posted image
PM MAIL WWW   Вверх
fantast
Дата 28.4.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: нет
Всего: 2



mr.DUDA, чел написал
Цитата

почему-то не меняет значения в цикле? Почему?

что скорее всего означает, что программа у него скомпелировалась, а значит этот пример он написал в торопях, и эти ошибки в пропертях допустил из-за неосторожности, и они к теме не имеют никакого отношения.

а так разумеется ты прав.


--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
MasterOfCode
Дата 28.4.2008, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 2
Всего: 27



Возникли такие вопросы:
Оператор foreach начинает брать значения с первого элемента, а не с нулевого? (Очень сомнительно, т.к. я же начинаю с 0 элемента и в режиме отладчика проверяю lines[index].Value и line.Value имеют одинаковое значение)

в цикле foreach (cLine line in lines)
в line пойдет указатель на запись в lines? Т.о. можно просто менять line и в "массиве" будут синхронно происходить изменения?

Спасибо mr.DUDA, не знал что сеттер таким образом устанавливается через маленькое value. smile
Всем спасибо.

Добавлено @ 19:06
Цитата(fantast @ 28.4.2008,  17:29)
и судя по всему ты хотел внести 
Код

index++;

эту строку в тело цикла

Прости, но помоему index++ в теле цикла. smile

Это сообщение отредактировал(а) MasterOfCode - 28.4.2008, 19:08


--------------------
user posted image
PM ICQ   Вверх
mr.DUDA
Дата 28.4.2008, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(MasterOfCode @  28.4.2008,  19:00 Найти цитируемый пост)
Оператор foreach начинает брать значения с первого элемента, а не с нулевого?

С нулевого, и всё в цикле правильно (за исключением перестановки местами - нужна промежуточная переменная).


--------------------
user posted image
PM MAIL WWW   Вверх
Dennnis
Дата 28.4.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 23.3.2008

Репутация: 1
Всего: 4



Цитата(MasterOfCode @  28.4.2008,  19:00 Найти цитируемый пост)
в line пойдет указатель на запись в lines? Т.о. можно просто менять line и в "массиве" будут синхронно происходить изменения?

smile 
Вобщем так должно быть
Код

cLine line;
List<cLine> lines = new List<cLine>();
//заполняю lines
foreach (string readLine in header)
{
    lines.Add(new cLine(readLine));
}
int index = 0;
//меняю местами значения.
foreach (cLine line in lines)
{
    if (line.Name != "STRT" && line.Name != "STOP")
    {
        string tmp = line.Value;
        line.Value = line.Сomments;
        line.Сomments = tmp;
    }
}

class cLine
{
//...
    public string Value
    {
        get { return this.value; }
        set { this.value = value; }
    }
    public string Сomments
    { 
        get { return this.comments; }
        set { this.comments = value; }
    }
//...
}

--------------------
Get Rich or Die Tryin'
PM   Вверх
fantast
Дата 29.4.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: нет
Всего: 2



блин совсем мозг мой отключился, писал как поэму не задумываясь о таких деталях 8)

Цитата(MasterOfCode @  28.4.2008,  19:00 Найти цитируемый пост)
Прости, но помоему index++ в теле цикла. smile

конечно ты прав, а я имел ввиду в тело if, таким образом получается, что мы пройдем по массиву, затирая эллементы 
Цитата
line.Name != "STRT" && line.Name != "STOP"

8)
Цитата(MasterOfCode @  28.4.2008,  19:00 Найти цитируемый пост)
Оператор foreach начинает брать значения с первого элемента, а не с нулевого?

Цитата(mr.DUDA @  28.4.2008,  19:46 Найти цитируемый пост)
С нулевого

разумеется, еще раз сорри
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
MasterOfCode
Дата 29.4.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 2
Всего: 27



Тема закрыта. smile Всем спасибо!


--------------------
user posted image
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0685 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.