Pri*_*six 0 c# linq performance
这似乎非常简单,但我似乎找不到一种方法来做到这一点。基本上就是标题,我想找到列表中满足要求的第一个项目,并修改找到的项目的值,如果该列表中没有一个项目满足要求,则执行其他操作。
我使用了 foreach 循环,但这绝对不是最快的方法。
foreach (CustomClass foo in bar)
{
if (!foo.Value)
{
foo.Value = true;
currentCount++;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
List.First()然后,当找不到值时,我尝试使用并捕获异常,但这要慢得多,而且我正在寻找性能。
编辑:不要介意下面的内容,我找到了如何使第一个或默认工作,但是有没有比 foreach 方法更快的方法多次执行此操作?谢谢
所以我尝试了 FirstOrDefault,但我不断收到空引用异常
if (bar.FirstOrDefault(c => c.Value == false).Equals(null))
{
break;
}
else
{
thePicture.FirstOrDefault(c => c.Value == false).Value = true;
currentCount++;
}
Run Code Online (Sandbox Code Playgroud)
有人知道如何使第一个或默认工作吗?或者有没有比 foreach 方法更快的其他方法。(这将在另一个循环中运行很多次)谢谢!
FirstOrDefault如果没有找到元素,将返回空引用 - 假设元素类型是引用类型。不要调用Equals结果,只需使用==... 并且不要调用它两次:
var first = bar.FirstOrDefault(c => !c.Value);
if (first == null)
{
...
}
else
{
// Use first, I suspect.
// (You don't in the sample code, but...)
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不会比适当的循环更快foreach,但它更具可读性。