次のようなparams object[]を受け取るメソッドがあります:
void Foo(params object[] items)
{
Console.WriteLine(items[0]);
}
このメソッドに 2 つのオブジェクト配列を渡すと、正常に動作します。
Foo(new object[]{ (object)"1", (object)"2" }, new object[]{ (object)"3", (object)"4" } );
// Output: System.Object[]
しかし、単一のobject[]を渡すと、object[]が最初のパラメータとして取得されず、代わりに、1つずつ渡したいようにすべての要素が取得されます。
Foo(new object[]{ (object)"1", (object)"2" });
// Output: 1, expected: System.Object[]
単一の object[] を params 配列の最初の引数として渡すにはどうすればよいですか?
ベストアンサー1
この場合、単純な型キャストにより、コンパイラーが何を意味するのかを認識できるようになります。
Foo((object)new object[]{ (object)"1", (object)"2" }));
配列はオブジェクトのサブタイプなので、これですべてうまくいきます。ただし、少し奇妙な解決策であることは認めます。