1

これは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();
    //}
}
4

3 に答える 3

3

refそのような変数の配列を渡すことはできません。そのような複数の変数に「変換」できるようにしたい場合は、ある種のセッターを渡す必要があると思います。

void Construct2 (params Action<Checkbox>[] cbas)
{
    foreach (var cba in cbas) cba(new Checkbox());
}

Construct2(
    (c) => cb = c,
    (c) => cb2 = c);
于 2012-09-06T12:55:00.590 に答える
1

それができない場合、パラメータ化された静的メソッドでチェックボックスを構築する他の方法はありますか?

はい、参照を渡そうとする代わりに、メソッドがチェックボックスの配列を返すようにします。

static CheckBox[] Construct2()
{
    //....
}
于 2012-09-06T13:01:27.523 に答える
1

これが C# で可能であるとは思えません。ポインターを使用するには、unsafeコンテキスト内でコードを宣言し、アプリケーションをコンパイルする必要があります/unsafe。ただし、これは構造体などの値型に対してのみ機能し、管理対象オブジェクト (Checkboxおよびおそらく使用するほとんどすべてのもの) に対しては機能しません。

于 2012-09-06T13:05:16.497 に答える