在数组中存储未初始化的对象,然后构建?

时间:2012-06-27 13:32:16

标签: c# asp.net

我不认为这在c#中是可能的,但无论如何都会发布。

鉴于我的代码

Control ctrlA = null, ctrlB = null;
var ctrlCollection = new []{ctrlA, ctrlB};
for (int i = 0; i < ctrlCollection.length;i++)
ctrlCollection[i] = new Control();

是否可以构造这两个对象并将它们引用到各自的变量(ctrlActrlB)?就目前而言,ctrlA和ctrlB仍将具有空引用。

5 个答案:

答案 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)

这不起作用。该集合仅存储对其内容的引用,例如ctrlActrlB。执行语句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数组初始化相同的范围内。