単一のオブジェクト[]をparamsオブジェクト[]に渡す方法 質問する

単一のオブジェクト[]をparamsオブジェクト[]に渡す方法 質問する

次のような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" }));

配列はオブジェクトのサブタイプなので、これですべてうまくいきます。ただし、少し奇妙な解決策であることは認めます。

おすすめ記事