Existe uma alternativa C # para os parâmetros vararg do Java?


92

Tenho trabalhado em Java e novo na tecnologia .Net

É possível declarar uma função em C # que aceita parâmetros de entrada variáveis

Existe alguma sintaxe C # semelhante à seguinte sintaxe Java?

void f1(String... a)

2
Se alguma das respostas abaixo respondeu à sua pergunta, da maneira como o Stack Overflow funciona, você "aceitaria" a resposta clicando na marca de seleção ao lado dela; detalhes aqui .
TJ Crowder

Respostas:


145

Sim, C # tem um equivalente aos parâmetros varargs. Eles são chamados de matrizes de parâmetros e introduzidos com o paramsmodificador:

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

Em seguida, chame-o com:

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

Assim como com Java, é apenas o último parâmetro que pode variar assim. Observe que (como com Java) um parâmetro de params object[] objectspode facilmente causar confusão, pois você precisa se lembrar se um único argumento do tipo object[]deve ser encapsulado novamente ou não. Da mesma forma, para qualquer tipo anulável, você precisa se lembrar se um único argumento de nullserá tratado como uma referência de matriz ou um único elemento de matriz. (Acho que o compilador só cria o array se for necessário, mas tendo a escrever código que evita ter que me lembrar disso.)


1, embora eu deva mencionar isso (como acontece com praticamente qualquer outro recurso de linguagem), isso não deve ser abusado.
Federico Berasategui

15
@HighCore: Se você for mencioná-lo sobre praticamente qualquer outro recurso de linguagem, provavelmente não vale a pena mencionar :)
Jon Skeet

2
@hvd: Dado que o OP parece ser um iniciante, prefiro não entrar em argumentos nomeados, parâmetros opcionais etc. aqui. Eu entendo o que você está tentando mostrar, mas acho que acrescentaria mais confusão do que luz no momento.
Jon Skeet de

37

Dê uma olhada nos parâmetros (referência C #)

A palavra-chave params permite que você especifique um parâmetro de método que leva um número variável de argumentos.

Você pode enviar uma lista de argumentos separados por vírgulas do tipo especificado na declaração do parâmetro ou uma matriz de argumentos do tipo especificado. Você também pode enviar nenhum argumento.

Nenhum parâmetro adicional é permitido após a palavra-chave params em uma declaração de método, e apenas uma palavra-chave params é permitida em uma declaração de método.

Conforme mostrado no exemplo, o método é declarado como

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

e usado como

UseParams(1, 2, 3, 4);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.