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

本文关键字:如果 找不到 操作 其他 执行 元素 第一个 列表 查找 | 更新日期: 2023-09-27 18:04:46

这似乎简单得离谱,但我似乎找不到方法。基本上是标题,我想在列表中找到符合要求的第一个项目,并修改找到的项目的值,如果该列表中没有符合要求的项目,则做其他事情。

我使用了前臂循环,但这绝对不是最快的方法。

foreach (CustomClass foo in bar)
{
    if (!foo.Value)
    {
         foo.Value = true;
         currentCount++;
         break;
    }
}

然后,我尝试使用List.First(),并在它找不到值时捕获异常,但速度要慢得多,我正在寻找性能。

EDIT:不要介意下面的内容,我发现了如何使第一个或默认值起作用,但有比foreach方法更快的方法多次做到这一点吗?感谢


所以我尝试了FirstOrDefault,但我一直得到空引用异常

if (bar.FirstOrDefault(c => c.Value == false).Equals(null))
{
    break;
}
else
{
    thePicture.FirstOrDefault(c => c.Value == false).Value = true;
    currentCount++;
}

有人知道如何使第一个或默认工作吗?或者有没有其他比foreach方法更快的方法(这将在另一个循环中运行很多次(谢谢!

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

FirstOrDefault将在未找到元素的情况下返回一个null引用——假设元素类型为引用类型。不要对结果调用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循环快,但它可能更可读。

(bar!=null)?((bar[1].value == true)?(do something):(do something)):do something)

这里您只检查列表中的第一个元素,对吗?那为什么要绕圈呢。