我几乎可以肯定这违反了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();
//}
}
答案 0 :(得分:3)
你不能传递像这样的ref
个变量数组。如果你想能够构建“into”多个变量,我认为你需要传递某种类型的setter:
void Construct2 (params Action<Checkbox>[] cbas)
{
foreach (var cba in cbas) cba(new Checkbox());
}
Construct2(
(c) => cb = c,
(c) => cb2 = c);
答案 1 :(得分:1)
如果失败了,还有其他方法可以在参数化的静态方法中构建复选框吗?
是的,让方法返回一个复选框数组,而不是尝试传入引用。
static CheckBox[] Construct2()
{
//....
}
答案 2 :(得分:1)
我不相信这在C#中是可行的。为了使用指针,您必须在unsafe
上下文中声明代码,并使用/unsafe
编译应用程序。但是,这只适用于诸如结构的值类型,并且不适用于托管对象(Checkbox
以及您可能使用的大多数内容)。