-1
ループ内でif条件が満たされると、Dowhileループを終了しようとしています。 Dowhileループを使用する理由は、tagIDNumberがゴミ値をとることがあるためです。ここでは、コードの私の意図があるC#whileループ内のif条件に対してwhileループを終了します。
-
アプリケーション起動され、機能のタグID()が呼び出されたとき、previoustagIDNumberは空の文字列になります
- 初めて、tagIDNumberは、「タグ無し」、実際の値または「RESTART」アプリケーションになることはできません再び。
- tagIDNumberが初めての実際の値を取得すると、preIDoustagIDNumberに格納されます。
- 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";
}
}
}
'break'は決して呼び出されません。 –
'Identify'には、' tagIDNumberが空であるかどうかをチェックする前に2回呼び出す必要がありますか? – Abion47
'Globals.previoustagIDNumber'これを再考することをお勧めします。グローバル変数はめったに良い考えではありません。 –