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

C# 查找并更改列表中第一个满足要求的元素的值,如果找不到,请执行其他操作,c#,performance,linq,C#,Performance,Linq,这似乎简单得可笑,但我就是找不到办法。基本上是标题,我想在我的列表中找到满足要求的第一个项目,并修改找到的项目的值,如果列表中没有一个项目满足它,那么做其他事情 我使用了foreach循环来实现这一点,但这肯定不是最快的方法 foreach (CustomClass foo in bar) { if (!foo.Value) { foo.Value = true; currentCount++; break; } }

这似乎简单得可笑,但我就是找不到办法。基本上是标题,我想在我的列表中找到满足要求的第一个项目,并修改找到的项目的值,如果列表中没有一个项目满足它,那么做其他事情

我使用了foreach循环来实现这一点,但这肯定不是最快的方法

foreach (CustomClass foo in bar)
{
    if (!foo.Value)
    {
         foo.Value = true;
         currentCount++;
         break;
    }
}
然后,我尝试使用
List.First()
并在找不到值时捕获异常,但这要慢得多,我正在寻找性能

编辑:不管下面是什么内容,我发现了如何使第一个或默认值起作用,但是有没有比foreach方法快很多倍的方法?谢谢


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

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

有人知道如何使第一个或默认工作吗?或者有没有比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...)
}

请注意,这不会比适当的
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...)
}
(bar!=null)?((bar[1].value == true)?(do something):(do something)):do something)

请注意,这不会比适当的
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...)
}
(bar!=null)?((bar[1].value == true)?(do something):(do something)):do something)

请注意,这不会比适当的
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...)
}
(bar!=null)?((bar[1].value == true)?(do something):(do something)):do something)
请注意,这不会比适当的
foreach
循环快,但它可以更具可读性

(bar!=null)?((bar[1].value == true)?(do something):(do something)):do something)
这里您只检查列表中的第一个元素,对吗? 那么,为什么要循环呢

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

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

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

LINQ不会比foreach快。两者都将迭代同一个集合,直到找到第一个元素。我使用了foreach循环,但这肯定不是最快的方法。可能是的。也许直接for循环要快一点。。LINQ通常不是更快,只是写得好,排序也更好。虽然理解O(n)线性处理的适用性取决于很多因素,主要是要处理的数据量,但在一定范围内,我还没有真正看到LINQ和foreach之间惊人的差异。尽管如此,对于使用foreach的这种场景,linq不会比foreach更快。两者都将迭代同一个集合,直到找到第一个元素。我使用了foreach循环,但这肯定不是最快的方法。可能是的。也许直接for循环要快一点。。LINQ通常不是更快,只是写得好,排序也更好。虽然理解O(n)线性处理的适用性取决于很多因素,主要是要处理的数据量,但在一定范围内,我还没有真正看到LINQ和foreach之间惊人的差异。尽管如此,对于使用foreach的这种场景,linq不会比foreach更快。两者都将迭代同一个集合,直到找到第一个元素。我使用了foreach循环,但这肯定不是最快的方法。可能是的。也许直接for循环要快一点。。LINQ通常不是更快,只是写得好,排序也更好。虽然理解O(n)线性处理的适用性取决于很多因素,主要是要处理的数据量,但在一定范围内,我还没有真正看到LINQ和foreach之间惊人的差异。尽管如此,对于使用foreach的这种场景,linq不会比foreach更快。两者都将迭代同一个集合,直到找到第一个元素。我使用了foreach循环,但这肯定不是最快的方法。可能是的。也许直接for循环要快一点。。LINQ通常不是更快,只是写得好,排序也更好。虽然理解O(n)线性处理的适用性取决于很多因素,主要是要处理的数据量,但在一定范围内,我还没有真正看到LINQ和foreach之间惊人的差异。尽管如此,对于这样一个场景,规定使用foreachSort是C#的一种新用法,如果这个问题很明显,那么请提前道歉,
first
是bar中项目的浅拷贝,所以当我第一次更改时,仍然会更改bar中的项目吗?@HandofC'thuhlu:假设您的列表是一个类列表,它是一个引用。如果您不确定引用是如何工作的,那么现在就应该了解更多信息——这对于有效地使用C#至关重要。请看C#的一些新内容,如果这个问题很明显,请提前表示歉意,但是
第一个
是条形图中项目的浅拷贝,所以当我第一次更改时,仍然会更改条形图中的项目吗?@HandofC'thuhlu:假设您的列表是一个类列表,这是一个引用