7

在 C#.NET 中,有没有办法将可变数量的对象作为引用对象传递?例如:

MyMethod (ref param1, ref param2, ref param3)

...具有任意数量的各种类型的参数。

4

2 回答 2

6

如果您愿意在 C# 中使用未记录的__arglist__refvalue关键字,则可以。

警告:未记录的功能可能会在 C# 的未来版本中发生变化。仅在必要时使用这些关键字,要了解如果 Microsoft 在下一版本中更改其行为,您的代码可能会停止工作。

例如,下面的程序通过int引用GetRandomValues方法传递三个变量。它输出 2、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 回答