O C # suporta um número variável de argumentos e como?

O C # suporta um número variável de argumentos?

Se sim, como C # suporta variável não de argumentos?

Quais são os exemplos?

Como os argumentos variables ​​são úteis?

EDIT 1 : Quais são as restrições sobre isso?

EDIÇÃO 2 : A questão não é sobre o parâmetro opcional mas Param variável

Sim. O exemplo clássico seria o params object[] args :

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

Um típico usecase seria passar parâmetros em um ambiente de linha de comando para um programa, onde você os passa como strings. O programa tem então que validá-los e atribuí-los corretamente.

Restrições:

  • Apenas uma palavra-chave params é permitida por método
  • Tem que ser o último parâmetro.

EDIT: Depois de ler suas edições, eu fiz o meu. A parte abaixo também aborda methods para alcançar números variables ​​de argumentos, mas acho que você realmente estava procurando o caminho dos params .


Também um dos mais clássicos, é chamado sobrecarga de método . Você provavelmente já usou muito:

 //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); } 

Por último, mas não menos importante, o mais interessante: Argumentos opcionais

 //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/pt-br/library/dd264739.aspx

C # suporta arrays de parâmetro de comprimento variável usando a palavra-chave params .

Aqui está um exemplo.

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

Há mais informações aqui .

Sim, params :

 public void SomeMethod(params object[] args) 

params tem que ser o último argumento e pode ser de qualquer tipo. Não tenho certeza se tem que ser uma matriz ou apenas um IEnumerable.

Eu suponho que você quer dizer um número variável de parâmetros do método . Se então:

 void DoSomething(params double[] parms) 

(Ou misturado com parâmetros fixos)

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

Restrições:

  • Eles devem ser todos do mesmo tipo (ou de um tipo de filho), como também são verdadeiros para matrizes
  • Só pode haver um para cada método
  • Eles devem vir por último na lista de parâmetros

É tudo o que posso pensar no momento, embora possa haver outros. Verifique a documentação para mais informações.