Existe-t-il une alternative C # aux paramètres vararg de Java?


92

J'ai travaillé sur Java et sur la nouvelle technologie .Net

Est-il possible de déclarer une fonction en C # qui accepte des paramètres d'entrée variables

Existe-t-il une syntaxe C # similaire à la syntaxe Java suivante?

void f1(String... a)

2
Si l'une des réponses ci-dessous répond à votre question, sur le fonctionnement de Stack Overflow, vous «acceptez» la réponse en cliquant sur la coche à côté; détails ici .
TJ Crowder

Réponses:


145

Oui, C # a un équivalent des paramètres varargs. Ils sont appelés tableaux de paramètres et introduits avec le paramsmodificateur:

public void Foo(int x, params string[] values)

Alors appelez-le avec:

Foo(10, "hello", "there");

Tout comme avec Java, ce n'est que le dernier paramètre qui peut varier comme ça. Notez que (comme avec Java) un paramètre de params object[] objectspeut facilement prêter à confusion, car vous devez vous rappeler si un seul argument de type object[]est censé être encapsulé à nouveau ou non. De même pour tout type Nullable, vous devez vous rappeler si un seul argument de nullsera traité comme une référence de tableau ou comme un élément de tableau unique. (Je pense que le compilateur ne crée le tableau que s'il le faut, mais j'ai tendance à écrire du code, ce qui m'évite d'avoir à m'en souvenir.)


+1, même si je mentionnerais que (comme avec à peu près n'importe quelle autre fonctionnalité linguistique), cela ne devrait pas être abusé.
Federico Berasategui

15
@HighCore: Si vous voulez le mentionner à propos de n'importe quelle autre fonctionnalité linguistique, cela ne vaut probablement pas la peine de le mentionner :)
Jon Skeet

2
@hvd: Étant donné que l'OP semble être un débutant, je préfère ne pas entrer dans les arguments nommés, les paramètres optionnels, etc. ici. Je vois le point que vous essayez de faire valoir, mais je pense que cela ajouterait plus de confusion que de lumière pour le moment.
Jon Skeet

37

Jetez un œil aux paramètres (référence C #)

Le mot-clé params vous permet de spécifier un paramètre de méthode qui prend un nombre variable d'arguments.

Vous pouvez envoyer une liste d'arguments séparés par des virgules du type spécifié dans la déclaration de paramètre ou un tableau d'arguments du type spécifié. Vous pouvez également envoyer aucun argument.

Aucun paramètre supplémentaire n'est autorisé après le mot-clé params dans une déclaration de méthode, et un seul mot-clé params est autorisé dans une déclaration de méthode.

Comme indiqué dans l'exemple, la méthode est déclarée comme

public static void UseParams(params int[] list)
{
    for (int i = 0; i < list.Length; i++)
    {
        Console.Write(list[i] + " ");
    }
    Console.WriteLine();
}

et utilisé comme

UseParams(1, 2, 3, 4);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.