1

我几乎可以肯定这违反了 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();
    //}
}
4

3 回答 3

3

您不能传递这样的ref变量数组。如果您希望能够像这样构造“进入”多个变量,我认为您需要传入某种设置器:

void Construct2 (params Action<Checkbox>[] cbas)
{
    foreach (var cba in cbas) cba(new Checkbox());
}

Construct2(
    (c) => cb = c,
    (c) => cb2 = c);
于 2012-09-06T12:55:00.590 回答
1

如果做不到这一点,还有其他方法可以在参数化静态方法中构造复选框吗?

是的,让该方法返回一个复选框数组,而不是尝试传入引用。

static CheckBox[] Construct2()
{
    //....
}
于 2012-09-06T13:01:27.523 回答
1

我不相信这在 C# 中是可能的。为了使用指针,您必须在unsafe上下文中声明您的代码,并使用/unsafe. 但是,这仅适用于诸如结构之类的值类型,不适用于托管对象(这是Checkbox您可能会使用的大多数东西)。

于 2012-09-06T13:05:16.497 回答