The C# 4.0 specification is quite explicit in how this all plays out. 7.5.3.1 says that if a function with params
can be applied either in normal form (ignoring the params
keyword) or expanded form (using the params
keyword), then normal form wins.
Assuming Foo
was declared as Foo(params object[] args)
, then the call Foo(new Foobar[] {new Foobar(1), new Foobar(2), new Foobar(3)) });
is applicable in normal form, since Foobar[]
is implicitly convertible to object[]
(6.1.6 clause 5). Therefore, the normal form is used and the expanded form is ignored.
(I'm assuming that C# 5.0 did not change this part of the language.)