我不确定这在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#中轻松完成这项工作,或者是不是可能?
答案 0 :(得分:0)
它只是一个简单的循环,不需要使用LINQ。您只需要一个for
循环。
for (int i = 0 ; i < mControls.Count ; i++) {
mControl[i] = new myControl(this);
}
但,无需撰写cLeft
,cTop
等。您可以使用索引器来引用它们:mControls[0]
,{{1等等。
请记住,mControl[1]
循环或foreach
扩展方法不起作用。这是因为您正在更改变量的引用。这只是参考类型的另一个令人困惑的(初学者)功能!
考虑这个方法
ForEach
你称这种方法:
public void ChangeReference (string s) {
s = "Hello";
}
将String s = "xxx";
ChangeReference (s);
成为&#34;你好&#34;通话结束后?不。在该方法中,您正在更改内存中字符串的位置,但参数仍在同一位置!