我几乎可以肯定这违背了 C# 的基本法则,但是是否可以通过引用构造项目的“数组”或“集合”?
如果做不到这一点,是否有任何其他方法可以在带参数的静态方法中构造复选框?
希望我的伪代码有意义(关于Construct2
的一切)
CheckBox cb = null, cb2 = null;
Main()
{
Construct(ref cb);//works
Construct2(new []{ref cb, ref cb2});//isnt going to work!
}
static void Construct(ref CheckBox cb){
cb = new CheckBox();//works
}
static void Construct2(CheckBox[] cbs) { //
cbs[0] = new CheckBox();
cbs[1] = new CheckBox();
//for (int i = 0; i < cbs.Length;i++){
// cbs[i] = new CheckBox();
//}
}
最佳答案
你不能像那样传递一个 ref
变量数组。如果您希望能够像那样构造“成”多个变量,我认为您需要传入某种类型的 setter :
void Construct2 (params Action<Checkbox>[] cbas)
{
foreach (var cba in cbas) cba(new Checkbox());
}
Construct2(
(c) => cb = c,
(c) => cb2 = c);
关于c# - 在没有引用的情况下构造对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12300282/