2016-10-31 296 views
-1

我试图退出Dowhile循环,当if条件在循环内满足时。使用Dowhile循环的原因是tagIDNumber有时会使用垃圾值。这里是我的代码的意图C#在while循环内退出while循环for if条件

  1. 第一次时启动的应用程序和功能的标签识别()被调用,previoustagIDNumber将是空字符串,tagIDNumber可以是“NO TAG”,实际值或“重启”的应用再次。
  2. 当tagIDNumber第一次获得实际值时,它将被存储在previoustagIDNumber中。
  3. dowhile循环用于执行函数Identify(),直到tagIDNumber == previoustagIDNumber。

但是tagIDNumber也可以是空字符串,在这种情况下,while循环必须退出。 当if条件满足时,下面的代码看起来不适用于退出dowhile循环。

public string TagID() 
    { 
     SetAttenuation(Attenuation); 

     StringBuilder tagIDNumber = new StringBuilder(); // TagID 
     int TagType; 

     TagType = Identify(tagIDNumber, SEGOTAGTYPE); 

     // When the application is launched first time, previous Tag ID value is empty 
     if (Globals.previoustagIDNumber != "") 
     { 
      if (tagIDNumber.ToString().ToUpper() != Globals.previoustagIDNumber) 
      { 
       do 
       { 
        tagIDNumber.Clear(); 
        TagType = Identify(tagIDNumber, SEGOTAGTYPE); 

        if (tagIDNumber.ToString() == "") 
        { 
         return "NO TAG"; 
         break; 
        } 
       } 
       while (tagIDNumber.ToString().ToUpper() != Globals.previoustagIDNumber); 
      } 
      return tagIDNumber.ToString().ToUpper(); 
     } 
     else 
     { 
      if (TagType == SEGOTAGTYPE) 
      { 
       if (tagIDNumber.ToString() == "") 
       { 
        return "NO TAG"; 
       } 
       else 
       { 
        return tagIDNumber.ToString().ToUpper(); 
       } 
      } 
      else 
      { 
       return "RESTART"; 
      } 
     }   
    } 
+8

你'return'有效退出循环,所以'break'永远不会被调用。 –

+0

“Identify”中是否有某些内容需要您在检查“tagIDNumber为空之前调用它两次? – Abion47

+0

'Globals.previoustagIDNumber'您可能想重新考虑这一点。全局变量很少是一个好主意。 –

回答

0

相反破译密码的正常流动的,你可以使用一个变量来表示对做......循环退出:

   bool getOut=false; 
       do 
       { 
        tagIDNumber.Clear(); 
        TagType = Identify(tagIDNumber, SEGOTAGTYPE); 

        if (tagIDNumber.ToString() == "") 
         getOut=true; 
       } 
       while (tagIDNumber.ToString().ToUpper() != Globals.previoustagIDNumber & getOut==false);