C # Для цикла с LIST с использованием LINQ - PullRequest
4 голосов
/ 18 августа 2011

Я использую LINQ и возвращаю список на мой уровень бизнес-логики. Я пытаюсь изменить одно из значений в списке (меняя рейтинг «звезды» на изображение с количеством звездочек).

Хотя счетчик (i) работает, цикл FOR работает неправильно. В первый раз он останавливается на правильном IF, но затем он выскакивает в операторе ELSE для всех, и все значения заканчиваются на «star0.png». Похоже, я не перебираю список ??? Заранее спасибо!

    for (int i = 0; i < ReviewList.Count; i++)
    {
        string serviceCode = ReviewList[i].SERVICE.SERVICE_DESC;
        if (serviceCode == "*")
        {
            ReviewList[i].SERVICE.SERVICE_DESC = "star1.png";
        }
        else if (serviceCode == "**")
        {
            ReviewList[i].SERVICE.SERVICE_DESC = "star2.png";
        }
        else if (serviceCode == "***")
        {
            ReviewList[i].SERVICE.SERVICE_DESC = "star3.png";
        }
        else if (serviceCode == "****")
        {
            ReviewList[i].SERVICE.SERVICE_DESC = "star4.png";
        }
        else
        {
            ReviewList[i].SERVICE.SERVICE_DESC = "star0.png";
        }
    }

Ответы [ 4 ]

3 голосов
/ 18 августа 2011

Если все значения заканчиваются на star0.png, то вы циклически перебираете список.Тот факт, что оператор else является единственным кодом, выполняемым для каждого элемента, наводит на мысль о логической ошибке - возможно, вы хотели сделать что-то подобное?

string serviceCode = ReviewList[i].SERVICE.SERVICE_CODE;
2 голосов
/ 18 августа 2011

Я не думаю, что проблема в for loop, работающем должным образом ... Ваш синтаксис хорош, и, как написано, будет повторяться ReviewList.Count # раз.

Я бы прошел и проверил содержимоеReviewList первый.

Дайте мне знать, что вы найдете

1 голос
/ 18 августа 2011

Если вы знаете, что каждый предмет будет состоять из нескольких звезд, почему бы не сделать это?:

for (int i = 0; i < ReviewList.Count; i++)
{
    string serviceCode = ReviewList[i].SERVICE.SERVICE_DESC;
    ReviewList[i].SERVICE.SERVICE_DESC = "star" + serviceCode.Length + ".png";
}
0 голосов
/ 18 августа 2011

Защита при двойном проходе и с другим условием

for (int i = 0; i < ReviewList.Count; i++)
{
    string serviceCode = ReviewList[i].SERVICE.SERVICE_DESC;
    if(!serviceCode.Contains(".png")) { // once name set should not be modified
      if(serviceCode.Contains("*")) 
         ReviewList[i].SERVICE.SERVICE_DESC = "star" + serviceCode.Length + ".png";
      else
         ReviewList[i].SERVICE.SERVICE_DESC = "star0.png";

   }
}

альтернативный подход LINQ

       ReviewList.ForEach(rs=>if(!rs.SERVICE.SERVICE_DESC.Contains(".png"))
{ rs.SERVICE.SERVICE_DESC = 
    "star" + rs.SERVICE.SERVICE_DESC.Length + ".png"});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...