我已经阅读了有关将对象[]传递给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 []),因此是一个无效的转换异常。
我做错了什么?
答案 0 :(得分:8)
C#(一般来说是.NET)数组是协变的。您只需将string[]
传递给object[]
参数即可。
DoSave("save", values.Skip(1).ToArray());
您发布的代码绝对不是您测试的确切代码。 Cast<object>
也应正常运作。这行不应该编译:
string value1 = values[0]; // object -> string, no implicit conversion.
请发布导致问题的完全代码。