C# 如何使用LINQ更改多个对象中的相同属性?
虽然这段代码有效。。。我觉得它可以从使用LINQ中获益。这个程序将在带有Atom处理器的平板电脑上使用,所以我只是在寻找使用最少的资源/周期。好吧,我仍然会使用C# 如何使用LINQ更改多个对象中的相同属性?,c#,performance,linq,C#,Performance,Linq,虽然这段代码有效。。。我觉得它可以从使用LINQ中获益。这个程序将在带有Atom处理器的平板电脑上使用,所以我只是在寻找使用最少的资源/周期。好吧,我仍然会使用foreach循环,但您可以使用LINQ作为查询部分: private void AllowOtherSelectors(bool value) { foreach (var c in this.Parent.Controls) { if (c == this)
foreach
循环,但您可以使用LINQ作为查询部分:
private void AllowOtherSelectors(bool value)
{
foreach (var c in this.Parent.Controls)
{
if (c == this)
continue;
if (!(c is RoundGroupedSelector))
continue;
var rgs = c as RoundGroupedSelector;
rgs.AllowMultiple = value;
}
}
foreach(父控件中的变量c
第()类
.其中(x=>x!=此))
{
c、 AllowMultiple=值;
}
我肯定会同意Jon的答案,但为了说明你关于“使用最少周期”的观点,你可能会让它像这样快一点:
foreach (var c in Parent.Controls
.OfType<RoundGroupedSelector>()
.Where(x => x != this))
{
c.AllowMultiple = value;
}
通过在循环之前复制this.AllowMultiple
并在循环之后恢复,我避免了每次迭代的if(c==this)
测试。我还删除了对is
的冗余使用
只有在有相当多的控件并且分配时,这才会加快速度。AllowMultiple
速度非常快并且没有副作用
我必须强调,这种微观优化通常是完全没有意义的,如果你做这种事情,你必须对它进行测试,看看它是否真的更快
我在这里发布这个只是为了兴趣。我绝对不是建议你真的应该这么做!:) @RobertSnyder-John可以纠正我的错误,但我很确定LINQ并没有提供比迭代更好的性能。这只是一般性的事情,因为你说表演在这里很重要。你突出了我性格中的一个重要缺陷。。。过分担心。这个表单将有3个RoundGroupedSelector,3个按钮,可能还有2个标签。所以就像你说的,关注周期可能是我的耻辱。我把我的程序放在一个平板电脑上,效果很好。LINQ并没有明显地减慢速度,但你的帖子确实让我有所了解。我不知道as会返回null而不会抛出错误。我想我会得到一个非法的施法操作。@RobertSnyder哈,不到六个控制。。。是的,使用乔恩的密码。:)
private void AllowOtherSelectors(bool value)
{
var saved = this.AllowMultiple;
foreach (var c in this.Parent.Controls)
{
var rgs = c as RoundGroupedSelector;
if (rgs != null)
rgs.AllowMultiple = value;
}
this.AllowMultiple = saved;
}