none
Parâmetros Variáveis RRS feed

  • Pergunta

  • Existe uma forma de eu construir um método, que aceite quantidade variáveis de argumentos? Por exemplo:
    Tenho dois forms de cadastro. Um eu cadastro Setor, que possui 3 campos, o outro eu cadastro Colaboradores, que tem sei lá, juns 15 a 20 campos. É possível com um único método? Claro que não é ao mesmo tempo, tipo, se estou no Form de Setor, chamo o método e passo os parâmetros de cada argumento. Se estou no Form de colaboradores, passo os de colab e assim sucessivamente. Tem como?
    quarta-feira, 28 de novembro de 2012 16:59

Respostas

  • cara uma coisa bacana que eu gosto de usar e se encaixa no que tu quer é usar o tipo params como argumento..

    com isso tu pode criar um método que tu pode passar valores um atras do outro, tipo chamadno um método Testar(parametro1, parametro2,.....parametro50) é claro que ficaria feio se for passar muitos parametros e o bom é usar uma collection mesmo como o joao sugeriu... mas se for passar uma quantidade não prevista numa formatação por exemplo fica legal... tipo o método Format da classe string que concatena quantas strings tu quiser  -> String.Format("val", "val2", ....)

    basta no método que tu vai chamar fazer isto

    private void Método(params object[] valores)

    {

    }

    terça-feira, 4 de dezembro de 2012 15:46

Todas as Respostas

  • Não sei o porque você quer colocar tudo no mesmo método, visualmente eu acho que não fica legal até porque são cadastros diferentes, mas você pode usar parâmetros opcionais:

    public int Teste(int x, int y = 1)

    {

    return x + y;

    }

    int resultado = Teste(x: 2);


    • Sugerido como Resposta Vitor Mendes quinta-feira, 29 de novembro de 2012 18:29
    quarta-feira, 28 de novembro de 2012 17:17
  • Lembrando que o Codigo do Guilherme só funciona com o .NET 4.0+

    E concordo com o Guilherme.. Colocar tudo em um mesmo metodo é péssimo.

    Cada classe deveria ter seu proprio metodo de para tratar seus dados... Isso o que vc esta fazendo vai contra as boas praticas de programaçao. Procure por SOLID e veja o que diz o principio S - single responsability (responsabilidade única): Uma classe deve ter uma única responsabilidade.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée



    quarta-feira, 28 de novembro de 2012 17:33
    Moderador
  • Você, pode passar como parâmetro um Dictionary, que permite ter como chave, os nomes dos parâmetros a passar e como valor, o valor correspondente ao parâmetro.

    Depois no método, basta ler o objeto Dictionary.

            Dictionary<string, string> dict = new Dictionary<string, string>()

    {
       {"variavel1", "valor1"},
       {"variavel2", "valor2"},
       {"variavel3", "valor3"},
       {"variavel4", "valor4"}
    };

    // Loop over pairs with foreach
    foreach (KeyValuePair<string, string> pair in dict)
    {
       Console.WriteLine("{0}, {1}",
    pair.Key,
    pair.Value);
    }


    João Sousa Senior Software Engineer

    quarta-feira, 28 de novembro de 2012 21:39
  • Como eu passaria, por exemplo um dicionario em um metodo de Insert em um BD, tipo>

    InsereDados(como seria aqui o dicionario)

    {

    }

    terça-feira, 4 de dezembro de 2012 12:47
  •  InsereDados(Dictionary<string, string>() dict)

    {
       // Loop over pairs with foreach
       foreach (KeyValuePair<string, string> pair in dict)
       {
          Console.WriteLine("{0}, {1}",
          pair.Key,
          pair.Value);
       }

    }


    João Sousa Senior Software Engineer

    terça-feira, 4 de dezembro de 2012 12:59
  • cara uma coisa bacana que eu gosto de usar e se encaixa no que tu quer é usar o tipo params como argumento..

    com isso tu pode criar um método que tu pode passar valores um atras do outro, tipo chamadno um método Testar(parametro1, parametro2,.....parametro50) é claro que ficaria feio se for passar muitos parametros e o bom é usar uma collection mesmo como o joao sugeriu... mas se for passar uma quantidade não prevista numa formatação por exemplo fica legal... tipo o método Format da classe string que concatena quantas strings tu quiser  -> String.Format("val", "val2", ....)

    basta no método que tu vai chamar fazer isto

    private void Método(params object[] valores)

    {

    }

    terça-feira, 4 de dezembro de 2012 15:46