7

C#.NET で、可変数のオブジェクトを参照オブジェクトとして渡す方法はありますか? 例えば:

MyMethod (ref param1, ref param2, ref param3)

...さまざまなタイプの任意の数のパラメーターを使用します。

4

2 に答える 2

6

__arglist文書化されていない__refvalueキーワードをC#で使用する場合は、可能です。

注意:文書化されていない機能は、C#の将来のバージョンで変更される可能性があります。これらのキーワードは、Microsoftが次のバージョンで動作を変更した場合にコードが機能しなくなる可能性があることを理解して、必要な場合にのみ使用してください。

たとえば、次のプログラムは、メソッドintを参照して3つの変数を渡します。GetRandomValues2、1、および4を出力し、変数が正常に変更されたことを示します。

static void Main()
{
    int x = 0, y = 0, z = 0;
    GetRandomValues(__arglist(ref x, ref y, ref z));
    Console.WriteLine(x);
    Console.WriteLine(y);
    Console.WriteLine(z);
}

static void GetRandomValues(__arglist)
{
    Random random = new Random(1);
    ArgIterator iterator = new ArgIterator(__arglist);
    while (iterator.GetRemainingCount() > 0)
    {
        TypedReference r = iterator.GetNextArg();
        __refvalue(r, int) = random.Next(0, 10);
    }
}
于 2012-10-22T02:46:34.703 に答える
5

いいえ、これは不可能です。可変数の引数は、配列を渡す上で「シンタックス シュガー」として実装されます。「参照渡し」は型のプロパティではないため、参照渡しパラメータの配列を作成することはできません。

于 2012-10-22T02:30:30.123 に答える