2009-08-28 4 views
1

オブジェクト[]をparamsオブジェクト[]に渡すことについてのトピックを読んでいますが、なぜそれが私とうまくいかないのかわかりません。オブジェクト[]をparamsオブジェクト[]に渡していません

Iクラスにこれらすぎる機能を有する:

... 
    private void CallbackEvent(object source, CallbackEvetArgs e) { // Some event with e.Data as string 
    ... 
     string[] values = e.Data.Split('|'); 
     DoSave("save", values.Skip(1).Cast<object>().ToArray()); 
    ... 
    } 
... 
    public void DoSave(string action, params object[] values) { 
    ... 
     string value1 = values[0]; 
    ... 
    } 
... 

代わりに値1で文字列を受信し、値1は、アレイ全体(文字列[])、したがって、無効キャスト例外を受信して​​います。

私は間違っていますか?

答えて

8

C#(一般に.NET)配列は共変型です。パラメータobject[]にはstring[]を渡します。

DoSave("save", values.Skip(1).ToArray()); 

あなたが投稿したコードは、あなたがテストしたコードではありません。 Cast<object>も正しく動作するはずです。この行は、コンパイルべきではありません。

string value1 = values[0]; // object -> string, no implicit conversion. 

は、問題の原因正確なコードを投稿してください。

+0

これは当てはまりますが、 '.Cast ()'をチェーンに挿入すると、これがなぜ壊れますか? – AnthonyWJones

+0

AnthonyWJones:それは壊れてはいけません。私はOPがこれに間違っていると思う。 –

+0

+1でもs/C#/ CLR – JaredPar

関連する問題