2009-08-28 1 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]; 
    ... 
    } 
... 

대신 VALUE1의 문자열을 수신, VALUE1은 전체 어레이 (문자열 []) 때문에 무효 주조 예외를 수신한다.

내가 뭘 잘못하고 있니?

답변

8

C# (일반적으로 .NET) 배열은 공변입니다. 단순히 매개 변수로 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