通常我想检查提供的值是否与列表中的值匹配(例如,在验证时):
if (!acceptedValues.Any(v => v == someValue))
{
// exception logic
}
Run Code Online (Sandbox Code Playgroud)
最近,我注意到ReSharper要求我将这些查询简化为:
if (acceptedValues.All(v => v != someValue))
{
// exception logic
}
Run Code Online (Sandbox Code Playgroud)
显然,这在逻辑上是相同的,可能稍微更具可读性(如果你已经做了很多数学),我的问题是:这是否会导致性能下降?
它感觉应该是这样(即.Any()听起来像是短路,而.All()听起来不是这样),但我没有任何证据证明这一点.有没有人更深入地了解查询是否会解决相同的问题,或者ReSharper是否让我误入歧途?
我有一个Crate对象,它有一个KeyValuePairs列表.目前,我正在遍历每一对,以查看列表中所有项目的kvp.Value.PixelsWide是否相同.如果是,则返回true,否则返回false.
我现有的方法如下所示:
public bool Validate(Crate crate)
{
int firstSectionWidth = 0;
foreach (KeyValuePair<string, SectionConfiguration> kvp in crate.Sections)
{
if (firstSectionWidth == 0)//first time in loop
{
firstSectionWidth = kvp.Value.PixelsWide;
}
else //not the first time in loop
{
if (kvp.Value.PixelsWide != firstSectionWidth)
{
return false;
}
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
我很好奇是否可以在LINQ查询中执行?
在此先感谢您的帮助!