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
而不是计算失败次数,我们可以在发现差异后立即返回。(在我看来,这也使意图更加清晰。)
我要指出的是,这里的变量名称可能会产生误导 - 明文和加密文本相同确实很奇怪。