0

私はこれがC#で可能だとは思わないが、とにかくそれを投稿する.

私のコードを考えると

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

これら 2 つのオブジェクトを作成し、それぞれの変数 (ctrlAおよびctrlB) を参照することはできますか? 現状では、ctrlA と ctrlB にはまだ null 参照があります。

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

これはうまくいきません。コレクションは、そのコンテンツへの参照のみを保存しctrlAますctrlB。ステートメントctrlCollection[i] = new Control();が実行されると、この参照は別のものに置き換えられます。

ctrlA引き続き元のctrlA参照 (null) をctrlCollection[i]指し、新しく初期化されたControlオブジェクトを指します。

于 2012-06-27T13:35:46.200 に答える
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 に答える
0

これは、配列の長さを明示的に定義することと本質的に同じです。配列に null を追加してから、配列項目で新しくインスタンス化された Control で null を上書きする必要はありません。

var ctrlCollection = new Control[2];
for (int i = 0; i < ctrlCollection.Length; i++)
    ctrlCollection[i] = new Control();
于 2012-06-27T13:36:16.510 に答える