1

object[] を params object[] に渡すというトピックを読みましたが、なぜうまくいかないのかわかりません。

クラスにはこれらの機能もあります。

...
    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];
    ...
    }
...

しかし、value1 で文字列を受け取る代わりに、value1 は配列全体 (string[]) を受け取るため、無効なキャスト例外が発生します。

私は何を間違っていますか?

4

1 に答える 1

8

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

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

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

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

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

于 2009-08-28T16:39:02.897 に答える