Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#对于使用LINQ的列表循环_C#_Linq_List_For Loop - Fatal编程技术网

C#对于使用LINQ的列表循环

C#对于使用LINQ的列表循环,c#,linq,list,for-loop,C#,Linq,List,For Loop,我正在使用LINQ并将列表返回到我的业务逻辑层。我正在尝试更改列表中的一个值(将“星级”评级更改为具有星级数的图像) 尽管计数器(i)似乎正在工作,但FOR循环工作不正常。第一次通过它时,它会在正确的IF处停止,然后在ELSE语句中弹出,所有值都以“star0.png”结尾。看起来好像我没有在列表中循环???提前谢谢 for (int i = 0; i < ReviewList.Count; i++) { string serviceCode = Revie

我正在使用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";
        }
    }
for(int i=0;i
如果您知道每个项目都将由多个星星组成,为什么不这样做呢

for (int i = 0; i < ReviewList.Count; i++)
{
    string serviceCode = ReviewList[i].SERVICE.SERVICE_DESC;
    ReviewList[i].SERVICE.SERVICE_DESC = "star" + serviceCode.Length + ".png";
}
for(int i=0;i
如果所有值都以
star0.png
结束,则您将在列表中循环。
else
语句是为每个元素执行的唯一代码这一事实表明了一个逻辑错误——您是否打算这样做

string serviceCode = ReviewList[i].SERVICE.SERVICE_CODE;

我不认为这是循环正常工作的问题。。。您的语法很好,编写时将迭代
ReviewList.Count
#次

我将首先逐步检查并验证
ReviewList
的内容


请告诉我您在双通和其他情况下发现了什么

保护

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";

   }
}

您是否尝试在列表循环中使用foreach项?我觉得循环本身是正确的。在调试器中单步执行此操作时会发生什么?
serviceCode
s的值是什么?您是否确认了
ReviewList
的内容?听起来可能是一个共享的参考。理论上,这并不能完全解释
其他
的原因(尽管在实践中可能)。您需要某种排序或检查字符串的每个元素是否都是*符号,检查长度以确保长度不超过4这也是我的反应。。。“所有值”意味着循环确实有效。我在代码中注意到的唯一区别是,您已将SERVICE.SERVICE_DESC替换为SERVICE.SERVICE_代码。后者在我的表中是一个整数,是该表中的标识值。@Susan是的,我建议您可能是想放置
SERVICE\u code
,而不是放置
SERVICE\u DESC
——根据您的评论,显然不是这样。如果在
else
语句中添加断点,那么
serviceCode
的一些值是什么?谢谢您的帮助。如果你看答案0,你可以看到我最终是如何使它工作的,这部分是由于你的建议和上面的建议。非常感谢!这就是我所做的。(1) 将serviceCode更改为整数,其比较的值为表的标识值。因此,如果SERVICe_ID=1,则REVIEWLIST[I].SERVICe.SERVICe_DESC=star1.png。它工作得很好。由于我能够在UI中提取SERVICE.SERVICE_DESC,我不明白为什么它不能在我的总线逻辑层中工作。有什么想法吗???哦,好吧,谢谢你的帮助!!!如果不完全看代码,很难说。。。尽管我从评论中得知,您已经解决了您的问题,这是一件好事:)
       ReviewList.ForEach(rs=>if(!rs.SERVICE.SERVICE_DESC.Contains(".png"))
{ rs.SERVICE.SERVICE_DESC = 
    "star" + rs.SERVICE.SERVICE_DESC.Length + ".png"});