web-dev-qa-db-fra.com

C # prend-il en charge un nombre variable d'arguments, et comment?

C # prend-il en charge un nombre variable d'arguments?

Si oui, comment C # prend-il en charge la variable no d'arguments?

Quels sont les exemples?

Comment les arguments variables sont-ils utiles?

EDIT 1: Quelles sont les restrictions à ce sujet?

EDIT 2: La question ne concerne pas les paramètres optionnels mais les paramètres variables

45

Oui. L'exemple classique serait le params object[] args:

//Allows to pass in any number and types of parameters
public static void Program(params object[] args)

Un cas d'utilisation typique serait de passer des paramètres dans un environnement de ligne de commande à un programme, où vous les transmettez sous forme de chaînes. Le programme doit ensuite les valider et les affecter correctement.

Restrictions:

  • Un seul mot clé params est autorisé par méthode
  • Ce doit être le dernier paramètre.

EDIT: Après avoir lu vos modifications, j'ai fait les miennes. La partie ci-dessous couvre également les méthodes pour atteindre un nombre variable d'arguments, mais je pense que vous cherchiez vraiment la méthode params.


Une des méthodes les plus classiques est également appelée surcharge de méthode . Vous les avez probablement déjà beaucoup utilisées:

//both methods have the same name and depending on wether you pass in a parameter
//or not, the first or the second is used.
public static void SayHello() {
    Console.WriteLine("Hello");
}
public static void SayHello(string message) {
    Console.WriteLine(message);
}

Dernier point mais non des moindres: Arguments facultatifs

//this time we specify a default value for the parameter message
//you now can call both, the method with parameter and the method without.
public static void SayHello(string message = "Hello") {
    Console.WriteLine(message);
}

http://msdn.Microsoft.com/en-us/library/dd264739.aspx

70
hotS85

C # prend en charge les tableaux de paramètres de longueur variable à l'aide du mot clé params.

Voici un exemple.

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

Il y a plus d'informations ici .

15
recursive

Oui, params :

public void SomeMethod(params object[] args)

params doit être le dernier argument et peut être de n'importe quel type. Je ne sais pas s'il doit s'agir d'un tableau ou simplement d'un IEnumerable.

11
Michael Stum

Je suppose que vous voulez dire un nombre variable de paramètres de méthode . Si c'est le cas:

void DoSomething(params double[] parms)

(Ou mélangé avec des paramètres fixes)

void DoSomething(string param1, int param2, params double[] otherParams)

Restrictions:

  • Ils doivent tous être du même type (ou d'un type enfant) comme cela est également vrai pour les tableaux
  • Il ne peut y en avoir qu'un pour chaque méthode
  • Ils doivent venir en dernier dans la liste des paramètres

C'est tout ce à quoi je peux penser en ce moment même s'il pourrait y en avoir d'autres. Pour plus d'information, regardez la documentation.

7
M.Babcock