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