Passing an array as `params` argument

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 }).

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)