none
цикл по коллекции RRS feed

  • Вопрос

  • в продолжении Этого

    Есть коллекция в ней 7 Item для проверки занёс абсолютно идентичные данные 2 цифры

    пытаюсь пройтись по коллекции и через другой класс вывести то что есть

                    for (int i = 0; i < Obpany.Count; i++)
                    {
                         List<int> lstfirst = pfg.loaddatalist(
                            Convert.ToInt32(Obpany[i].Item5),
                            Convert.ToInt32(Obpany[i].Item6)
                            );
    
                        if (i==1)
                        {
                            var dlgd = new Windows.UI.Popups.MessageDialog(
                                lstfirst[0].ToString() +
                                lstfirst[1].ToString() +
                                lstfirst[2].ToString(), "Что приходит");
                            dlgd.ShowAsync(); 
                        }

    данные приходят правильные каждый раз одинаковые (т.к. уходят одинаковые) Т.е. если я без цикла обращаюсь вручную по каждому элементу

                        List<int> lstfirst = pfg.loaddatalist(
                            Convert.ToInt32(Obpany[1].Item5),
                            Convert.ToInt32(Obpany[1].Item6)
                            );
    и поочереди вместо 1 проверю все Item то всё приходит как надо, однако цикл уже со второй итерации почему то присылает совсем не те цифры. С коллекциями лучше Foreach но у меня чего то не получается пришлось пробовать For. Но и for  Никак. Цикл неправильный у меня?


    Спасибо


    • Изменено developers_s 28 марта 2013 г. 14:32
    28 марта 2013 г. 14:00

Ответы

  • Коллега, если это не мега секретный проект, не могли бы вы вынести из него класс от которого объявлена переменная pfg в отдельный проект и там написав приведенный вами фрагмент кода, выложить это все сюда, чтобы можно было посомтреть в дебагере.

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

    Для того чтобы в этом убедиться, вместо цикла напишите:

    List<int> lstfirst = pfg.loaddatalist(
                Convert.ToInt32(Obpany[0].Item5),
                Convert.ToInt32(Obpany[0].Item6)
                );
    
    var dlgd = new Windows.UI.Popups.MessageDialog(
        lstfirst[0].ToString() +
        lstfirst[1].ToString() +
        lstfirst[2].ToString(), "Что приходит");
    dlgd.ShowAsync();
    
    lstfirst = pfg.loaddatalist(
                Convert.ToInt32(Obpany[1].Item5),
                Convert.ToInt32(Obpany[1].Item6)
                );
    
    dlgd = new Windows.UI.Popups.MessageDialog(
        lstfirst[0].ToString() +
        lstfirst[1].ToString() +
        lstfirst[2].ToString(), "Что приходит");
    dlgd.ShowAsync();
    
    lstfirst = pfg.loaddatalist(
                Convert.ToInt32(Obpany[2].Item5),
                Convert.ToInt32(Obpany[2].Item6)
                );
    
    dlgd = new Windows.UI.Popups.MessageDialog(
        lstfirst[0].ToString() +
        lstfirst[1].ToString() +
        lstfirst[2].ToString(), "Что приходит");
    dlgd.ShowAsync(); 

    Да, да, именно вот так - три раза. И если в этом случае ошибка таже что и в цикле, то у вас неправильно работает метод loaddatalis. Если же вывод будет правильный, то выкладывайте исходники.
    • Помечено в качестве ответа developers_s 30 марта 2013 г. 5:31
    28 марта 2013 г. 16:31
    Отвечающий

Все ответы

  • Что такое  pfg.loaddatalist и Obpany ?
    • Изменено QazRdx 28 марта 2013 г. 15:12
    28 марта 2013 г. 15:11
  • pfg.loaddatalist - метод возвращающий список List<int>

    Obpany - ObservablyCollection<Tuple<int, int, int, int, int, int, int>>

    Суть такая: пройтись по коллекции выбрать 5 и 6 Item и отправить их в pfg.loaddatalist. Оттуда вернутся 3 другие числа. Эти три другие числа надо сложить как массив. Пример:

    Obpany:

    Item1 1,5,45,6,8,9,7

    Item2 2,5,7,56,4,3,8

    ...

    через цикл отправляем в pfg.loaddatalist(9,7)

    получаем список из 3 цифр

     12, 45, 67 

    через цикл отправляем в pfg.loaddatalist(3,8)

    получаем список из 3 цифр

    5, 8, 1

    результат должен получиться 17, 53, 68, Но сложение сложением до него ещё далеко т.к.

    если отправлю вручную оба раза 9,7 (т.е. если все Item у коллекции Obpany будут одинаковые) то приходят одинаковые числа.

    как только отправляю через цикл - так (при всех одинаковых Item в Obpany) приходят разные числа. Хотя по идее должны приходить одинаковые. Ведь алгоритм возврата из pfg.loaddatalist  не меняется. Я бы подумал на метод но вручную всё приходит правильно.


    Спасибо


    • Изменено developers_s 28 марта 2013 г. 15:42
    28 марта 2013 г. 15:40
  • Извиняюсь, с WPF не сложилось!
    28 марта 2013 г. 16:24
  • Коллега, если это не мега секретный проект, не могли бы вы вынести из него класс от которого объявлена переменная pfg в отдельный проект и там написав приведенный вами фрагмент кода, выложить это все сюда, чтобы можно было посомтреть в дебагере.

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

    Для того чтобы в этом убедиться, вместо цикла напишите:

    List<int> lstfirst = pfg.loaddatalist(
                Convert.ToInt32(Obpany[0].Item5),
                Convert.ToInt32(Obpany[0].Item6)
                );
    
    var dlgd = new Windows.UI.Popups.MessageDialog(
        lstfirst[0].ToString() +
        lstfirst[1].ToString() +
        lstfirst[2].ToString(), "Что приходит");
    dlgd.ShowAsync();
    
    lstfirst = pfg.loaddatalist(
                Convert.ToInt32(Obpany[1].Item5),
                Convert.ToInt32(Obpany[1].Item6)
                );
    
    dlgd = new Windows.UI.Popups.MessageDialog(
        lstfirst[0].ToString() +
        lstfirst[1].ToString() +
        lstfirst[2].ToString(), "Что приходит");
    dlgd.ShowAsync();
    
    lstfirst = pfg.loaddatalist(
                Convert.ToInt32(Obpany[2].Item5),
                Convert.ToInt32(Obpany[2].Item6)
                );
    
    dlgd = new Windows.UI.Popups.MessageDialog(
        lstfirst[0].ToString() +
        lstfirst[1].ToString() +
        lstfirst[2].ToString(), "Что приходит");
    dlgd.ShowAsync(); 

    Да, да, именно вот так - три раза. И если в этом случае ошибка таже что и в цикле, то у вас неправильно работает метод loaddatalis. Если же вывод будет правильный, то выкладывайте исходники.
    • Помечено в качестве ответа developers_s 30 марта 2013 г. 5:31
    28 марта 2013 г. 16:31
    Отвечающий