执行while block直到三个条件之一升高

时间:2013-04-01 12:09:15

标签: c# while-loop

我想做一些操作,直到满足以下条件之一^

  • html.IndexOf("/>")==0
  • html.IndexOf("</"+tagName+">")==0
  • html[0]=='<'

这里html是实际字符串。 我尝试了什么 - 只需对反向条件应用OR运算。但这是错误的。如何正确地做到这一点。这是我的代码:

while((html.IndexOf("/>")!=0)&&(html.IndexOf("</"+tagName+">")!=0)||(html[0]!='<'))
{
    html = html.Remove(0, 1);
}

2 个答案:

答案 0 :(得分:4)

由于某种原因,您正在混合AND和OR。

while(a && b || c) 

但你想写

while(a && b && c) 

代码应为:

while (   (html.IndexOf("/>")!=0)
        &&(html.IndexOf("</"+tagName+">")!=0)
        &&(html[0]!='<'))

我也会回应@ cdhowie的评论。使用HTML解析器将使您的代码更易于读取和编写,并使其对于各种输入更加健壮。

答案 1 :(得分:2)

您的代码很难阅读。您可能需要考虑拆分各个条件以便于维护:

while(true)
{
   if(html.IndexOf("/>")==0) break;             // stop the while loop if we reach the end of a tag
   if(html.IndexOf("</"+tagName+">")==0) break; // or we find the close tag
   if(html[0]=='<')) break;                     // or if we find the start of another tag

   // otherwise, do this:
   html = html.Remove(0, 1);
}