将对象[]传递给params对象[]无效

时间:2009-08-28 16:35:23

标签: c# object casting params

我已经阅读了有关将对象[]传递给params对象[]的主题,但我不知道为什么它不能与我合作。

我在课堂上也有这些功能:

...
    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 []),因此是一个无效的转换异常。

我做错了什么?

1 个答案:

答案 0 :(得分:8)

C#(一般来说是.NET)数组是协变的。您只需将string[]传递给object[]参数即可。

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

您发布的代码绝对不是您测试的确切代码。 Cast<object>也应正常运作。这行不应该编译:

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

请发布导致问题的完全代码。