esa*_*ain 1 c# linq lambda .net-6.0
我有一个验证函数,它接收两个字符串并进行计数比较,如果字符串大小相同,则它检查第一个字符串中的可见字符是否与第二个字符串相同。
private bool ValidateEncryptedText(string encrypted, string plain)
{
    if (plain.Count() != encrypted.Count())
        return false;
    else
    {
        for (int index = 0; index < plain.Count(); index++)
        {
            if (plain[index] != '*' && plain[index] != encrypted[index])
                return false;
        }
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)
    使用string.Length代替Count(),并使用Zip来比较对,投影到值元组以避免创建大量对象:
private bool ValidateEncryptedText(string encrypted, string plain) =>
    plain.Length == encrypted.Length &&
    plain.Zip(encrypted, (p, e) => ((p, e)))
         .All(pair => pair.p == '*' || pair.p == pair.e);
Run Code Online (Sandbox Code Playgroud)
请注意,通过使用All而不是计算失败次数,我们可以在发现差异后立即返回。(在我看来,这也使意图更加清晰。)
我要指出的是,这里的变量名称可能会产生误导 - 明文和加密文本相同确实很奇怪。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           198 次  |  
        
|   最近记录:  |