将变量关联到列表

时间:2015-09-26 13:24:56

标签: c#

我不确定这在C#中是否容易实现。但我想知道如何轻松完成这项工作。

public partial class Form1
{
  // I left out the unimportant code for this example
  private myControl cLeft,cTop,cBottom,cRight;
  private List<myControl>mControls;
  public Form1()
  {
  InitializeComponents();
  //this list should contain the fields cLeft,cTop,cBottom,cRight...
  mControls=new List<myControl>(){cLeft,cTop,cBottom,cRight};
  /* now I want that cLeft and so on get assigned...
  of course, this doesn't work because the list refers to the values of
   cLeft ... which are null. So I would need to store a reference to those fields to get this work.*/
  mControls.ForEach(x=>x=new myControl(this));
  }

}

我确信它可以通过反射来完成,但我认为应该有一种方法可以在C#中轻松完成这项工作,或者是不是可能?

1 个答案:

答案 0 :(得分:0)

它只是一个简单的循环,不需要使用LINQ。您只需要一个for循环。

for (int i = 0 ; i < mControls.Count ; i++) {
    mControl[i] = new myControl(this);
}

,无需撰写cLeftcTop等。您可以使用索引器来引用它们:mControls[0],{{1等等。

请记住,mControl[1]循环或foreach扩展方法不起作用。这是因为您正在更改变量的引用。这只是参考类型的另一个令人困惑的(初学者)功能!

考虑这个方法

ForEach

你称这种方法:

public void ChangeReference (string s) {
    s = "Hello";
}

String s = "xxx"; ChangeReference (s); 成为&#34;你好&#34;通话结束后?不。在该方法中,您正在更改内存中字符串的位置,但参数仍在同一位置!