2016-10-31 15 views
-1

ループ内でif条件が満たされると、Dowhileループを終了しようとしています。 Dowhileループを使用する理由は、tagIDNumberがゴミ値をとることがあるためです。ここでは、コードの私の意図があるC#whileループ内のif条件に対してwhileループを終了します。

    アプリケーション起動され、機能のタグID()が呼び出されたとき、previoustagIDNumberは空の文字列になります
  1. 初めて、tagIDNumberは、「タグ無し」、実際の値または「RESTART」アプリケーションになることはできません再び。
  2. tagIDNumberが初めての実際の値を取得すると、preIDoustagIDNumberに格納されます。
  3. dowhileループは、tagIDNumber == previoustagIDNumberまで、Identify()関数を実行するために使用されます。

しかし、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

'break'は決して呼び出されません。 –

+0

'Identify'には、' tagIDNumberが空であるかどうかをチェックする前に2回呼び出す必要がありますか? – Abion47

+0

'Globals.previoustagIDNumber'これを再考することをお勧めします。グローバル変数はめったに良い考えではありません。 –

答えて

0

代わりのコードの通常の流れを壊し、あなたは出口に... doループに示すために、変数を使用することができますので、あなたの `return`が効果的にループを抜ける

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

        if (tagIDNumber.ToString() == "") 
         getOut=true; 
       } 
       while (tagIDNumber.ToString().ToUpper() != Globals.previoustagIDNumber & getOut==false); 
関連する問題