2009-08-28 18 views
1

J'ai lu le sujet sur le passage d'un objet [] à un objet params [] mais je ne sais pas pourquoi ça ne marche pas avec moi.passer un objet [] à un objet params [] ne fonctionne pas

Je ces trop fonctions dans une classe:

... 
    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]; 
    ... 
    } 
... 

mais au lieu de recevoir une chaîne dans valeur1, valeur1 reçoit la totalité du tableau (string []) et donc une exception de coulée non valide.

Qu'est-ce que je fais mal?

Répondre

8

Les tableaux C# (.NET en général) sont covariants. Vous pouvez simplement passer le string[] à un paramètre object[].

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

Le code que vous avez affiché n'est certainement pas le code exact que vous avez testé. Cast<object> devrait également fonctionner correctement. Cette ligne ne doit pas compiler:

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

S'il vous plaît afficher le code exact l'origine du problème.

+0

Ceci est vrai mais la question demeure pourquoi cela casse si vous insérez un '.Cast ()' dans la chaîne? – AnthonyWJones

+0

AnthonyWJones: Il ne devrait pas casser. Je pense que OP a tort sur ce point. –

+0

+1 mais s/C#/CLR – JaredPar

Questions connexes