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

kur*_*bos 5 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;
Run Code Online (Sandbox Code Playgroud)

基本上,我正在生成一个令牌,并且为了使此令牌有效,必须将Mod120Check和IsCompliant检查失败.我无法改变这些方法返回数据的方式.

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

谢谢

Nat*_*gge 16

试试这个:

do
{
    token = GenerateToken(data, start, end);
} 
while (checkDataLength && Mod120Check(token) || IsCompliant(token))
Run Code Online (Sandbox Code Playgroud)

只是将你的条件转移到while.

(!)请注意,IsCompliant(token)只有checkDataLength && Mod120Check(token)状态才会调用false.它不应该导致任何附带影响,但它可以,取决于您的IsCompliant方法做什么.

  • 更整洁!OP可能要注意,在"Mod120Check"通过的情况下,原始代码仍然调用"IsCompliant",而这种重写不会.这几乎可以肯定是重写有利的另一点,但值得指出的是,以防这个电话有一些愚蠢的副作用或什么的. (2认同)