【问题标题】:Set Multilple Attributes at Once in C#在 C# 中一次设置多个属性
【发布时间】:2015-03-16 17:15:49
【问题描述】:

我认识到,当我想在 c# 中为多个对象/控件(此处为标签)设置相同的属性时,我必须经常键入相同的代码。 这通常看起来像这样:

string s = "one attribute";
label1.Text = s;
label2.Text = s;
label3.Text = s;
label4.Text = s;
label5.Text = s;

有没有什么方法可以用更少的代码更快地做到这一点? 我正在成像这样的东西:

string s = "one attribute";
(label1 && label2 && label3 && label4 && label5).Text = s;

回答:

string s = "one attribute";
label1.Text =
label2.Text =
label3.Text =
label4.Text =
label5.Text = s;

【问题讨论】:

  • .Text 是一个属性Attributes 是别的东西。
  • @Plutonix:除了“属性”是 .NET 所称的字段或属性的正确正式 OOP 术语...相互冲突的术语总是令人困惑。
  • 如果您要经常做这样的事情,您应该将所有控件添加到集合中并对其进行迭代。

标签: c# .net winforms properties


【解决方案1】:

您可以像这样在一行中完成所有操作。

label1.Text = label2.Text = label3.Text = label4.Text = label5.Text = "one attribute";

编辑:如果您想将标签保存在数组中,那么这是另一种方法,无需每次都实际写出 foreach 循环。

Label[] labels = new[] { label1, label2, label3, label4, label5 };
Array.ForEach(labels, x => { x.Text = "one attribute"; });

【讨论】:

  • 谢谢,这就是我想要的!太简单了,我什至没有意识到这个选项。
  • 但确实如此!这正是我所需要的。 :D
  • 我唯一不能相信的是我收到了多少赞成票,顺便说一句,如果您设置 Text 属性相当多,另一种方法是创建一个专门用于执行此操作的方法。
【解决方案2】:

另一种方法:

foreach(var label in new [] { label1, label2, label3, label4, label5 })
{
    label.Text = "one attribute";
}

如果您在多个地方执行此操作,则将该数组存储在某处可能会更方便:

IEnumerable<Label> labelsToUpdate = new [] { label1, label2, label3, label4, label5 };

foreach(var label in labelsToUpdate)
{
    label.Text = "one attribute";
}    

【讨论】:

    【解决方案3】:
    string s = "one attribute";
    label1.Text = 
    label2.Text = 
    label3.Text = 
    label4.Text = 
    label5.Text = s;
    

    【讨论】:

      【解决方案4】:

      我知道您可以分配多个变量,例如:

      label1.Text = label2.Text = "Whatever";
      

      但是我讨厌这个。在将来的某个时候,您可能想要重构代码而不是以这种方式设置变量。

      我宁愿这样做:

      String InitStr = "Whatever";
      label1.Text = InitStr;
      label2.Text = InitStr;
      label3.Text = InitStr;
      label4.Text = InitStr;
      

      将来如果你决定要更改 label3 的值,那么它会更干净。

      String InitStr = "Whatever";
      label1.Text = InitStr;
      label2.Text = InitStr;
      label3.Text = "new whatever";
      label4.Text = InitStr;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-03
        • 2020-01-24
        • 2012-03-08
        • 2010-10-24
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多