我不认为这在c#中是可能的,但无论如何都会发布。
鉴于我的代码
Control ctrlA = null, ctrlB = null;
var ctrlCollection = new []{ctrlA, ctrlB};
for (int i = 0; i < ctrlCollection.length;i++)
ctrlCollection[i] = new Control();
是否可以构造这两个对象并将它们引用到各自的变量(ctrlA
和ctrlB
)?就目前而言,ctrlA和ctrlB仍将具有空引用。
答案 0 :(得分:4)
不,不是。 (至少,除非你想用指针或其他东西工作)这对你有用吗?
var ctrlCollection = new Control[2];
for (int i = 0; i < ctrlCollection.Length; i++)
ctrlCollection[i] = new Control();
Control ctrlA = ctrlCollection[0], ctrlB = ctrlCollection[1];
答案 1 :(得分:2)
这不起作用。该集合仅存储对其内容的引用,例如ctrlA
和ctrlB
。执行语句ctrlCollection[i] = new Control();
时,此引用将被另一个引用替换。
ctrlA
仍将指向原始ctrlA
引用(为空),ctrlCollection[i]
指向新初始化的Control
对象。
答案 2 :(得分:0)
这与显式定义数组的长度基本相同。不需要向数组添加空值,然后在数组项中使用新实例化的Control覆盖null。
var ctrlCollection = new Control[2];
for (int i = 0; i < ctrlCollection.Length; i++)
ctrlCollection[i] = new Control();
答案 3 :(得分:0)
var ctrlCollection = new []{ctrlA, ctrlB};
for (int i = 0; i < ctrlCollection.length;i++)
{
ctrlCollection[i] = new Control();
}
Control ctrlA = ctrlCollection[0];
Control ctrlB = ctrlCollection[1];
无法想象为什么你想要,但这应该做我认为你要问的。
答案 4 :(得分:0)
假设你的集合大小是固定的,你可以这样做:
Control ctrlA, ctrlB;
var controls = new[] {
ctrlA = new Control(),
ctrlB = new Control()
};
这要求Control
变量声明在与Control
数组初始化相同的范围内。