C# 创建控件列表只是为了在foreach中而不是在多行上设置一些共享属性,可以吗?

C# 创建控件列表只是为了在foreach中而不是在多行上设置一些共享属性,可以吗?,c#,performance,.net-3.5,C#,Performance,.net 3.5,我有这样的代码: if (someCondition) { control1.Enabled = true; control1.BackColor = Colors.CornSilk; control2.Enabled = true; control2.BackColor = Colors.CornSilk; control3.Enabled = true; control3.BackColor = Colors.CornSilk; ...

我有这样的代码:

if (someCondition)
{
    control1.Enabled = true;
    control1.BackColor = Colors.CornSilk;
    control2.Enabled = true;
    control2.BackColor = Colors.CornSilk;
    control3.Enabled = true;
    control3.BackColor = Colors.CornSilk;
    ...
} 
else 
{
    control1.Enabled = false;
    control1.BackColor = default(Color);
    control2.Enabled = false;
    control2.BackColor = default(Color);
    control3.Enabled = false;
    control3.BackColor = default(Color);
    ...
}
为这些控件创建一个列表并使用循环是否会降低内存或性能

var requiredControls = new List<Control>() { control1, control2, control3, .. };

if (someCondition)
{
    foreach(var c in requiredControls)
    {
        c.Enabled = true;
        c.BackColor = Colors.CornSilk;
    }
} 
else 
{
    foreach(var c in requiredControls)
    {
        c.Enabled = false;
        c.BackColor = default(Color);
    }
}
var requiredControls=new List(){control1,control2,control3,…};
如果(某些条件)
{
foreach(requiredControls中的var c)
{
c、 启用=真;
c、 背景色=颜色。玉米丝;
}
} 
其他的
{
foreach(requiredControls中的var c)
{
c、 启用=错误;
c、 BackColor=默认值(颜色);
}
}
甚至

var requiredControls = new List<Control>() { control1, control2, control3, .. };

foreach(var c in requiredControls)
{
    c.Enabled = someCondition;
    c.BackColor = (someCondition ? Colors.CornSilk : default(Color);
}
var requiredControls=new List(){control1,control2,control3,…};
foreach(requiredControls中的var c)
{
c、 启用=某些条件;
c、 BackColor=(someCondition?Colors.CornSilk:默认值(颜色);
}

您所做的一切都是完美的,任何性能上的影响都是微不足道的

你真正需要担心的是可读性。你所做的是非常可读的,但是你可以利用其他语言特性使它更可读

params
关键字是一个可以使用的工具。下面是一个演示

public class Program
{
    public static void Main(string[] args)
    {
        var foo1 = new Foo() { Bar = 1 };
        var foo2 = new Foo() { Bar = 2 };
        AddOne(foo1, foo2);
    }

    public static void AddOne(params Foo[] foos)
    {
        foreach(var foo in foos)
        {
            foo.Bar++;
        }
    }

    public class Foo
    {
        public int Bar { get; set; }
    }
}

如果您谈论的是原始性能差异,那么就性能而言,第一个差异是最好的,,但正如所有评论和回答中提到的,在这种特定情况下,差异可以忽略不计


小开销将是创建列表并循环通过它,考虑到在编译器优化中,对许多循环进行了一个步骤,即“代码>循环展开< /代码>,这将减少循环步骤并逐行写入,而不是遍历所有.< /P>如果内存或性能有下降的地方,请执行以下操作:nce,它还不足以让我注意到,我认为任何性能差异都是可以忽略不计的。它们之间的性能差异不是太大,但如果你使用最后一个,这意味着你是一个具有代码设计技能的优秀程序员。这些代码看起来像WinForm。我还以为你是WPF程序员呢?但问题很奇怪,因为如果你同时运行amples,你显然不会意识到性能上的差异。@LarsTech过去几年我一直在WinForms中工作,而我现在正在做的项目并没有得到很好的优化,而且内存也有问题。我恐怕我仍然不太了解C#的内部工作细节(顺便说一句,我想念WPF!)