C# 如何使用LINQ更改多个对象中的相同属性?

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)

虽然这段代码有效。。。我觉得它可以从使用LINQ中获益。这个程序将在带有Atom处理器的平板电脑上使用,所以我只是在寻找使用最少的资源/周期。

好吧,我仍然会使用
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;
}