查找并更改列表中符合要求的第一个元素的值,如果找不到则执行其他操作

时间:2015-07-26 07:18:22

标签: c# performance linq

这似乎很荒谬,但我似乎无法找到办法。基本上是标题,我想在列表中找到满足要求的第一个项目,并修改找到的项目的值,如果该列表中没有项目符合要求,则执行其他操作。

我正在使用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方法更快地完成此操作。 (这将在很多次的另一个循环中运行)谢谢!

2 个答案:

答案 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)

这里你只检查列表中的第一个元素吗? 那么为什么要进行循环呢。