Array
(
)

Como resolver o erro Indice fora dos limites da matriz

Rodrigo Ribeiro..
   - 05 jul 2012

Ola! estou fazendo uma função pra calcular um digito e esta dando um erro que não consigo tirar!
a função e essa
private string GeraCampoDigitavel(string CodBarra)
{
int i;
int c;
int Digitos;
int Inicio;
string Redutor = string.Empty;
string CampoAux = string.Empty;
Inicio = 0;
string resultado = string.Empty;
for (c = 1; c <= 4; c++)
{
CampoAux = CodBarra.Substring(Inicio, 11);
Digitos = 0;
for (i = 0; i <= 11; i++)
{
if (i % 2 != 0)
{
if ((Convert.ToInt32(CampoAux[i]) * 2) >= 10)// o erro esta acontecendo aqui quando acaba o lop
{
Redutor = (Convert.ToInt32(CampoAux[i]) * 2).ToString();
Digitos += Convert.ToInt32(Redutor[0]) + Convert.ToInt32(Redutor[1]);
}
else
{
Digitos += Convert.ToInt32(CampoAux[i]) * 2;
}
}
else
{
Digitos += Convert.ToInt32(CampoAux[i]);
}
}
Digitos = Digitos % 10;
if (Digitos != 0)
{
Digitos = 10 - Digitos;
}
resultado += CampoAux.ToString() + Convert.ToString(Digitos);
Inicio += 11;
}
return resultado;

}

James
   - 05 jul 2012

Pelo que observei no seu código você preenche a variável~

CampoAux = CodBarra.Substring(Inicio, 11);

Desta forma sua variável CampoAux possui um tamanho de 11 ou seja de posições 0 a 10.

em seu loop você verifica valores de 0 até 11, desta forma ele não encontrará na posição 11 da variável CampoAux.
Se a intenção for percorrer todos os campos dessa variável acredito que seu loop deveria ser:

for (i = 0; i < 11; i++)

Espero ter ajudado.

abraço,

Rodrigo Ribeiro..
   - 05 jul 2012

Isso mesmo amigo! deslize meu! deu certo, obrigado