Est-il possible d'avoir plusieurs paramètres params
en C #? Quelque chose comme ça:
void foobar(params int[] foo, params string[] bar)
Mais je ne suis pas sûr que ce soit possible. Si tel est le cas, comment le compilateur déciderait-il où scinder les arguments?
Vous ne pouvez avoir qu'un seul argument params. Vous pouvez avoir deux arguments de tableau et l'appelant peut utiliser des initialiseurs de tableau pour appeler votre méthode, mais il ne peut y avoir qu'un seul argument params.
void foobar(int[] foo, string[] bar)
...
foobar(new {1, 2,3}, new {"a", "b", "c"});
Non, ce n'est pas possible. Prends ça:
void Mult(params int[] arg1, params long[] arg2)
comment le compilateur est-il censé interpréter ceci:
Mult(1, 2, 3);
Cela pourrait être lu comme n'importe lequel:
Mult(new int[] { }, new long[] { 1, 2, 3 });
Mult(new int[] { 1 }, new long[] { 2, 3 });
Mult(new int[] { 1, 2 }, new long[] { 3 });
Mult(new int[] { 1, 2, 3 }, new long[] { });
Vous pouvez cependant prendre deux tableaux comme paramètres:
void Mult(int[] arg1, params long[] arg2)
Aucun paramètre supplémentaire n'est autorisé après le mot clé params dans un fichier déclaration de méthode, et un seul mot clé params est autorisé dans un fichier déclaration de méthode.
Non, un seul paramètre est autorisé et même cela doit être le dernier argument. Lire ceci
Ça va marcher
public void Correct(int i, params string[] parg) { ... }
Mais ça ne marchera pas
public void Correct(params string[] parg, int i) { ... }
Je sais que c'est un très vieux post, mais ici:
En C # 7, vous pouvez réellement. Vous pouvez utiliser System.ValueTuple
pour faire ceci:
private void Foorbar(params (int Foo, string Bar)[] foobars)
{
foreach (var foobar in foobars)
Console.WriteLine($"foo: {foobar.Foo}, bar: {foobar.Bar}");
}
Et ensuite, vous pouvez l'utiliser comme ceci:
private void Main() => Foobar((3, "oo"), (6, "bar"), (7, baz));
Et la sortie évidente:
Foo: 3, Bar: foo
Foo: 6, Bar: bar
Foo: 7, Bar: baz
Le seul inconvénient est que vous devez faire ceci: foobars[0].foo;
au lieu de foos[0];
, mais c'est vraiment un tout petit problème. En outre, si vous le vouliez vraiment, vous pouvez créer une extension ou une fonction permettant de les convertir en tableaux, bien que je ne pense pas que cela en vaille la peine.
Ce n'est pas possible. Il ne peut s'agir que d'un mot clé params par déclaration de méthode - à partir de MSDN - http://msdn.Microsoft.com/en-us/library/w5zay9db(v=vs.71).aspx