所以我有一些代码集中在do while循环周围。
string token;
var count = 0;
var checkDataLength= data.Length == 16;
do
{
count = 0;
token = GenerateToken(data, start, end);
if (checkDataLength)
{
if (Mod120Check(token))
{
count += 1;
}
}
if (IsCompliant(token))
{
count += 1;
}
}
while (count > 0);
return token;
基本上,我正在生成一个令牌,并且要使该令牌有效,必须使Mod120Check和IsCompliant检查失败。我无法更改这些方法如何返回数据。
虽然上面的代码有效,但我觉得它很丑,我想知道是否有人有更好的方法?
谢谢
答案 0 :(得分:16)
尝试一下:
do
{
token = GenerateToken(data, start, end);
}
while (checkDataLength && Mod120Check(token) || IsCompliant(token))
只需将您的条件移至while
。
(!)请注意,只有在IsCompliant(token)
声明为checkDataLength && Mod120Check(token)
的情况下,false
才会被调用。它不应该引起任何附带影响,但是可以,这取决于您的IsCompliant
方法的作用。
答案 1 :(得分:2)
您是对的,这很丑。您正在以一种意外的方式使用count
(在每个循环的顶部将其重置为零,并且由于两个不同的原因它可能变为正数)。当我看到count
时,我期望某些东西从零开始计数(或者从高开始计数完成)。尝试以下方法:
var count = 0;
更改为var goodEnough = false;
count = 0;
语句count += 1;
语句更改为goodEnough = true;
while (count > 0);
更改为while (!goodEnough);
这强调您从“不够好”状态开始,并且您将循环播放,直到某种条件使其足以继续循环为止。