0

我认为这在 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 仍将具有空引用。

4

5 回答 5

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];
于 2012-06-27T13:36:50.323 回答
2

这行不通。该集合仅存储对其内容的引用,在您的情况下ctrlActrlB. 当语句ctrlCollection[i] = new Control();被执行时,这个引用被另一个替换。

ctrlA仍将指向原始ctrlA引用(为空),ctrlCollection[i]指向新初始化的Control对象。

于 2012-06-27T13:35:46.200 回答
0

这与显式定义数组的长度基本相同。无需向数组添加空值,然后在数组项中使用新实例化的控件覆盖空值。

var ctrlCollection = new Control[2];
for (int i = 0; i < ctrlCollection.Length; i++)
    ctrlCollection[i] = new Control();
于 2012-06-27T13:36:16.510 回答
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]; 

无法想象您为什么要这样做,但这应该可以满足我的要求。

于 2012-06-27T13:40:46.540 回答
0

假设您的收藏大小是固定的,您可以这样做:

Control ctrlA, ctrlB;
var controls = new[] {
  ctrlA = new Control(),
  ctrlB = new Control()
};

这要求变量声明在与数组初始化Control相同的范围内。Control

于 2012-06-27T13:43:19.557 回答