2009-08-28 136 views
1

我读过关于传递一个对象[]到一个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一个字符串,而不是

,值1被接收到整个阵列(串[]),因此无效的铸造异常。

我在做什么错?

回答

8

C#(.NET一般)数组是协变的。您可以简单地将string[]传递给参数object[]

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

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

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

请张贴确切代码引起的问题。

+0

这是真的,但问题仍然存在,为什么如果您在链中插入'.Cast ()',会导致此问题中断? – AnthonyWJones 2009-08-28 16:43:32

+0

AnthonyWJones:它不应该打破。我认为OP在这方面是错误的。 – 2009-08-28 16:44:52

+0

+1但是s/C#/ CLR – JaredPar 2009-08-28 16:45:24