这似乎很荒谬,但我似乎无法找到办法。基本上是标题,我想在列表中找到满足要求的第一个项目,并修改找到的项目的值,如果该列表中没有项目符合要求,则执行其他操作。
我正在使用foreach循环,但它绝对不是最快的方法。
foreach (CustomClass foo in bar)
{
if (!foo.Value)
{
foo.Value = true;
currentCount++;
break;
}
}
然后我尝试使用List.First()
并在无法找到值时捕获异常,但这要慢得多,而且我正在寻找性能。
编辑:没关系下面的内容,我发现如何制作第一个或默认的工作,但是有一种比foreach方法更快的方法吗?感谢
所以我尝试了FirstOrDefault,但我一直得到null引用异常
if (bar.FirstOrDefault(c => c.Value == false).Equals(null))
{
break;
}
else
{
thePicture.FirstOrDefault(c => c.Value == false).Value = true;
currentCount++;
}
任何人都知道如何制作第一个或默认的作品?或者是否有任何其他方法比foreach方法更快地完成此操作。 (这将在很多次的另一个循环中运行)谢谢!
答案 0 :(得分:4)
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...)
}
请注意,这不会比适当的foreach
循环更快,但它可以更具可读性。
答案 1 :(得分:-1)
(bar!=null)?((bar[1].value == true)?(do something):(do something)):do something)
这里你只检查列表中的第一个元素吗? 那么为什么要进行循环呢。