- PR -

C#の可変長引数に配列

1
投稿者投稿内容
YAMANEKO
会議室デビュー日: 2008/06/06
投稿数: 19
投稿日時: 2008-06-27 15:00
C#で可変長引数(params)に配列を渡す方法で、こまっております。。

public MyResponse Call( string func, params object[] param )

このようなメソッドで、例えば

obj.Call( "test", "ABC", 123, otherobj );

というように、可変長のパラメータ付きで呼び出します。
この、上の例のような場合だと問題ないのですが・・・

可変長パラメータとして、一つの配列を渡そうとすると、

string[] s = new string[] { "ABC", "DEF" };
obj.Call( "test", s );

実質、

obj.Call( "test", "ABC", "DEF" );

という呼び出しと等価になってしまうのです。
(即ち、paramをforeachで回すと、stringの"ABC"と"DEF"がとれてしまう)
これを、二つのstringではなく、一つのstring[] として渡す方法ってないのでしょうか??

ちなみに、

string[] s = new string[] { "ABC", "DEF" };
obj.Call( "test", s, null );

というように、もう1個パラメータを追加すると、string[]として受け取れるのですが、
これでは都合がよくないので・・・。

[ メッセージ編集済み 編集者: YAMANEKO 編集日時 2008-06-27 15:07 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2008-06-27 15:21
そういう風にできています
http://msdn.microsoft.com/ja-jp/library/aa645765.aspx

ということで、
obj.Call( "test", (object)s );
お だ
会議室デビュー日: 2008/04/02
投稿数: 14
投稿日時: 2008-06-27 15:27
コード:
object o = new string[] { "ABC", "DEF" };
obj.Call("test", o);


でどうでしょうか?
YAMANEKO
会議室デビュー日: 2008/06/06
投稿数: 19
投稿日時: 2008-06-27 15:35
べるさん、おださん、ありがとうございます!

引用:

べるさんの書き込み (2008-06-27 15:21) より:
そういう風にできています
http://msdn.microsoft.com/ja-jp/library/aa645765.aspx

ということで、
obj.Call( "test", (object)s );



なるほど、そういう仕様だったのですね。
objectにキャストすることで、意図したとおりに一つのstring[]を渡せました。
ありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)