5
    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;
        }
    }

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

4

2 回答 2

11

好吧,我仍然会使用foreach循环,但您可以将 LINQ 用于查询部分:

foreach (var c in Parent.Controls
                        .OfType<RoundGroupedSelector>()
                        .Where(x => x != this))
{
    c.AllowMultiple = value;
}
于 2013-05-15T16:26:01.643 回答
1

我肯定会选择乔恩的答案,但只是为了解决你关于“使用最少周期”的观点,你可能会像这样让它更快一点:

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;
}

我通过在循环之前if (c == this)复制this.AllowMultiple并在之后恢复它来避免每次迭代的测试。我还删除了is.

如果有很多控件并且分配this.AllowMultiple非常快并且没有副作用,这只会加快速度。

我必须强调,这种微优化通常是完全没有意义的,如果你做这种事情,你必须检测它是否真的更快。

我在这里发布这个只是为了感兴趣。我绝对不是建议您实际上应该这样做!:)

于 2013-05-15T16:38:18.680 回答