What you've described simply doesn't happen. The compiler does not create a wrapper array unless it needs to. Here's a short but complete program demonstrating this:
using System;
class Test
{
static void MyMethod(params object[] args)
{
Console.WriteLine(args.Length);
}
static void Main()
{
object[] args = { "foo", "bar", "baz" };
MyMethod(args);
}
}
According to your question, this would print 1 - but it doesn't, it prints 3. The value of args
is passed directly to MyMethod
, with no further expansion.
Either your code isn't as you've posted it, or the "wrapping" occurs within GetArgs
.
You can force it to wrap by casting args
to object
. For example, if I change the last line of Main
to:
MyMethod((object) args);
... then it prints 1, because it's effectively calling MyMethod(new object[] { args })
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…