none
Retorno de um Parâmetro Atualizado RRS feed

  • Pergunta

  • Boa noite pessoal,

    Estou com um pequeno problema e gostaria da ajuda de vocês. Desenvolvi um Classe para calcular um Digito Verificador de um determinado número. Para essa classe eu estou enviando dois parâmetros. O número de 43 posições e um outro parâmetro que me retornará o valor encontrado. Eu consigo calcular o Dígito sem nenhum problema, porém, não estou conseguindo retorna esse parâmetro atualizado para a minha aplicação. Você poderiam me orientar como eu devo retornar esse parâmetro? Segue em anexo a minha classe:

    Eu à chamo desse forma:

                CalculoDigitoGeralBoleto CalcDigitoGeral = new CalculoDigitoGeralBoleto();
                CalcDigitoGeral.CalculaDigitoGeral(cConfBoleto, cDigitoGeralBoleto);

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace BoletoBancario.BLL
    {
        public class CalculoDigitoGeralBoleto
        {
    //        int nIndGeral = 43;
            int nInd12 = 2;
            int nNumero;
            int nTotal;
            int nTot2 = 2;
            int nTot1 = 1;
            int nResto;
            int nConfBoleto;
    
            string cDigitoGeralBoleto;
    
            string[] vValorCalculado = new string[44];
    
            public void CalculaDigitoGeral(string cConfBoleto, string cDigitoGeralBoleto)
            {
                for (int nIndGeral = 43; nIndGeral != 0; nIndGeral--)
                {
                    if (nInd12 == 1)
                    {
                        nNumero = Convert.ToInt32(cConfBoleto.Substring(nIndGeral, 1));
                        nTotal = (nTot2 * nNumero);
                        vValorCalculado[nIndGeral] = Convert.ToString(nTotal);
                        nInd12 = 2;
                    }
                    else
                    {
                        if (nInd12 == 2)
                        {
                            nNumero = Convert.ToInt32(cConfBoleto.Substring(nIndGeral, 1));
                            nTotal = (nTot2 * nNumero);
                            vValorCalculado[nIndGeral] = Convert.ToString(nTotal);
                            nInd12 = 1;
                        }
                    }
    
                }
                for (int nIndG = 0; nIndG <= 43; nIndG++)
                {
                    nNumero = Convert.ToInt32(vValorCalculado[nIndG]);
                    nTotal = (nTotal + nNumero);
                }
                nResto = (nTotal % 10);
                if (nResto.Equals(0))
                {
                    cDigitoGeralBoleto = "0";
                }
                else
                {
                    nConfBoleto = (10 - nResto);
                    cDigitoGeralBoleto = Convert.ToString(nConfBoleto);
                }
                this.cDigitoGeralBoleto = cDigitoGeralBoleto;
    
                return this.cDigitoGeralBoleto;
            
            }
    
        }
    }
    

    terça-feira, 3 de janeiro de 2017 00:42

Respostas

  • Garibaldo,

    Usando o 1º exemplo você precisa atribuir o valor retornado pelo método a uma variável, por exemplo:

    CalculoDigitoGeralBoleto CalcDigitoGeral = new CalculoDigitoGeralBoleto();
    string retorno = CalcDigitoGeral.CalculaDigitoGeral(cConfBoleto, cDigitoGeralBoleto);

    Na variável retorno terá o valor retornado pelo método


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    terça-feira, 3 de janeiro de 2017 13:26

Todas as Respostas

  • Olá,

    Há duas maneiras para retornar o valor por um método.

    Um deles é definir na assinatura dele o tipo de retorno e no final do método usar o return, dessa forma:

            public string CalculaDigitoGeral(string cConfBoleto, string cDigitoGeralBoleto)
            {
                for (int nIndGeral = 43; nIndGeral != 0; nIndGeral--)
                {
                    if (nInd12 == 1)
                    {
                        nNumero = Convert.ToInt32(cConfBoleto.Substring(nIndGeral, 1));
                        nTotal = (nTot2 * nNumero);
                        vValorCalculado[nIndGeral] = Convert.ToString(nTotal);
                        nInd12 = 2;
                    }
                    else
                    {
                        if (nInd12 == 2)
                        {
                            nNumero = Convert.ToInt32(cConfBoleto.Substring(nIndGeral, 1));
                            nTotal = (nTot2 * nNumero);
                            vValorCalculado[nIndGeral] = Convert.ToString(nTotal);
                            nInd12 = 1;
                        }
                    }
    
                }
                for (int nIndG = 0; nIndG <= 43; nIndG++)
                {
                    nNumero = Convert.ToInt32(vValorCalculado[nIndG]);
                    nTotal = (nTotal + nNumero);
                }
                nResto = (nTotal % 10);
                if (nResto.Equals(0))
                {
                    cDigitoGeralBoleto = "0";
                }
                else
                {
                    nConfBoleto = (10 - nResto);
                    cDigitoGeralBoleto = Convert.ToString(nConfBoleto);
                }
    
                return cDigitoGeralBoleto;
            
            }



    Outra forma é retornar a partir do próprio parâmetro, mas nesse caso deve ser usado o out na assinatura do método e também quando for chamá-lo,  dessa forma:

             public void CalculaDigitoGeral(string cConfBoleto, out string cDigitoGeralBoleto)
            {
                for (int nIndGeral = 43; nIndGeral != 0; nIndGeral--)
                {
                    if (nInd12 == 1)
                    {
                        nNumero = Convert.ToInt32(cConfBoleto.Substring(nIndGeral, 1));
                        nTotal = (nTot2 * nNumero);
                        vValorCalculado[nIndGeral] = Convert.ToString(nTotal);
                        nInd12 = 2;
                    }
                    else
                    {
                        if (nInd12 == 2)
                        {
                            nNumero = Convert.ToInt32(cConfBoleto.Substring(nIndGeral, 1));
                            nTotal = (nTot2 * nNumero);
                            vValorCalculado[nIndGeral] = Convert.ToString(nTotal);
                            nInd12 = 1;
                        }
                    }
    
                }
                for (int nIndG = 0; nIndG <= 43; nIndG++)
                {
                    nNumero = Convert.ToInt32(vValorCalculado[nIndG]);
                    nTotal = (nTotal + nNumero);
                }
                nResto = (nTotal % 10);
                if (nResto.Equals(0))
                {
                    cDigitoGeralBoleto = "0";
                }
                else
                {
                    nConfBoleto = (10 - nResto);
                    cDigitoGeralBoleto = Convert.ToString(nConfBoleto);
                }
            
            }

    Exemplo chamando o método com o out


    string valor1 = "xxxxxx";
    string valor2;
    
    CalculaDigitoGeral("xxxxxxx" out valor2);

    Espero ter ajudado!

    Valeu!



    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    terça-feira, 3 de janeiro de 2017 09:59
  • Bom dia André,

    Eu usei o primeiro exemplo que você indicou, porém, não funcionou. Será que é a forma que eu estou chamando a função: Estou chamando dessa forma.

          CalculoDigitoGeralBoleto CalcDigitoGeral = new CalculoDigitoGeralBoleto();
          CalcDigitoGeral.CalculaDigitoGeral(cConfBoleto, cDigitoGeralBoleto);

    Nesse momento o meu método, está igual ao exemplo que você indicou. 

    Garibaldo

    terça-feira, 3 de janeiro de 2017 13:13
  • Garibaldo,

    Usando o 1º exemplo você precisa atribuir o valor retornado pelo método a uma variável, por exemplo:

    CalculoDigitoGeralBoleto CalcDigitoGeral = new CalculoDigitoGeralBoleto();
    string retorno = CalcDigitoGeral.CalculaDigitoGeral(cConfBoleto, cDigitoGeralBoleto);

    Na variável retorno terá o valor retornado pelo método


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    terça-feira, 3 de janeiro de 2017 13:26
  • Obrigado André, funcionou corretamente.

    Garibaldo

    terça-feira, 3 de janeiro de 2017 13:51