передача объекта [] в объект params [] не работает - PullRequest
1 голос
/ 28 августа 2009

Я читал тему о передаче объекта [] объекту 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 Ответ

8 голосов
/ 28 августа 2009

C # (.NET в целом) массивы ковариантны. Вы можете просто передать string[] параметру object[].

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

Код, который вы разместили, точно не тот, который вы тестировали. Cast<object> также должно работать правильно. Эта строка не должна компилироваться:

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

Пожалуйста, отправьте точный код, вызывающий проблему.

...