2017-08-29 1 views
1

Je suis en train de porter l'une de nos fonctions Azure node.js en C#, donc c'est un C# exécuté dans un conteneur .csx. Je cours dans l'émulateur Windows Function local et l'ai également essayé dans l'exécution de fonctions dans Azure, les deux montrent les mêmes erreurs de compilateur.Comment passer plusieurs paramètres en tant que tableau dans une fonction C# Azure?

J'ai vu multipleotherquestions demander quelque chose de similaire, mais il semble y avoir quelque chose de différent en cours d'exécution dans un fichier .csx ou l'exécution des fonctions comme aucune des réponses travail.

C'est la signature de la méthode que je vous appelle:

DocumentClient.ExecuteStoredProcedureAsync<TValue> Method (Uri, Object[]) 

C'est le code de travail de run.csx:

string param1 = "param1"; 
string param2 = "param2"; 

// object[] params = {"param1", "param2"}; 

var response = await client.ExecuteStoredProcedureAsync<object>(
    sprocUri, 
    param1, 
    param2 
); 

Lorsque je tente d'ajouter les deux params dans un tableau et décommenter la ligne object[] params = {"param1", "param2"}; puis je reçois cette erreur du compilateur:

run.csx(72,14): error CS1001: Identifier expected 
run.csx(72,14): error CS1003: Syntax error, ',' expected 
run.csx(72,21): error CS1002: ; expected 
run.csx(72,21): error CS1525: Invalid expression term '=' 
run.csx(72,23): error CS1525: Invalid expression term '{' 
run.csx(72,23): error CS1002: ; expected 
run.csx(72,32): error CS1002: ; expected 
run.csx(72,32): error CS1513: } expected 
run.csx(72,42): error CS1002: ; expected 
Compilation failed. 

(ligne 72 correspond à l'instruction d'affectation de tableau)

J'ai essayé toutes ces différentes façons de définir le tableau, mais je reçois des erreurs similaires pour chacun:

Object[] params = {"param1", "param2"}; 
object[] params = new[] {"param1", "param2"}; 
object[] params = new[] {param1, param2}; 
string[] params = {"param1", "param2"}; 
string[] params = new string[] {"param1", "param2"}; 
dynamic[] params = new[] {"param1", "param2"}; 

Y at-il quelque chose de différent sur les fonctions Azure où il a besoin un style différent de définition de tableau? Il n'y a rien mentionné à propos des tableaux dans le C# Developer Reference.

Répondre

2

Le problème que vous rencontrez est que vous avez nommé la variable params qui est un mot réservé en C# (voir params (C# reference)). Essayez d'utiliser un nom différent.

Si vous êtes vraiment mis sur l'utilisation params, vous pouvez éventuellement utiliser un préfixe @ qui peut être utilisé en C# pour créer un identifiant qui serait un mot réservé autrement:

object[] @params = { param1, param2 }; 
+0

Merci, je l'ai changé args et cela fonctionne parfaitement maintenant. – Graham

+0

Par curiosité, y a-t-il un secret à utiliser un ArrayList au lieu d'un tableau d'objets dans l'appel de la méthode? – Graham

+0

@Graham non, ça devrait être pareil: 'var args = new ArrayList {param1, param2};' - tant que la méthode prend 'ArrayList' comme argument, bien sûr. En parlant de 'ArrayList', c'est une classe que vous ne voyez généralement pas après la première version de C# et/ou du code hérité. Il pourrait être plus idiomatique d'utiliser 'List ' pour exprimer "Je ne sais vraiment pas le type" au lieu de "il y a un certain type mais je ne peux pas l'exprimer" sémantique de 'ArrayList'. Mais c'est seulement si vous pouvez changer la signature de la méthode. –