2016-10-31 293 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);