'C# expand array to be arguments

void foo(int one, int two) {
}

public static void Main(string[] args) {
  var bar = new int[] { 1, 2 };
  foo(params bar);
}

What's the correct syntax to deconstruct the bar array and pass it as the arguments to the foo method?

In some other languages you can use a splat operator foo(...bar) or an unpack operator foo(*bar).

How can I do it in C#?



Solution 1:[1]

You can always use Reflection for such purpose. Here is example snippet on your example method:

class MainClass
{
    void foo(int one, int two)
    {
        Console.WriteLine(one + two);
    }

    static void Main()
    {
        var myInstance = new MainClass();

        var bar = new object[] { 1, 2 };
        var method = myInstance.GetType().GetMethod(nameof(MainClass.foo), BindingFlags.NonPublic | BindingFlags.Instance)
            ?? throw new InvalidOperationException($"Method '{nameof(MainClass.foo)}' not found");
        method.Invoke(myInstance, bar) ;
    }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Abdurrahim