寻找更优雅的DO WHILE解决方案

时间:2018-07-18 20:22:10

标签: c# do-while

所以我有一些代码集中在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检查失败。我无法更改这些方法如何返回数据。

虽然上面的代码有效,但我觉得它很丑,我想知道是否有人有更好的方法?

谢谢

2 个答案:

答案 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);

这强调您从“不够好”状态开始,并且您将循环播放,直到某种条件使其足以继续循环为止。