Al seleccionar varios valores en el cuadro de lista, obtener un índice de excepción estaba fuera de los límites de la matriz en Linq to Entity [cerrado]

Tengo varios valores en ListBox. Cuando estoy seleccionando un valor único, mi código funciona bien.

Pero cuando estoy seleccionando valores múltiples, me está dando esta excepción: -

El índice esta fuera de los límites de la matriz.

Mi codigo es:

if (submitButton == "Enroll Trainee")
{
    if (Request.Form["NonEnroll"] != null)
    {
        int i = 0;
        string[] selected = Request.Form["NonEnroll"].Split(',');
        if (selected != null)
        {
            if (selected.Count() != 0)
            {
                foreach (var item in selected)
                {
                    enrollDetails.TraineeID = Convert.ToInt32(item[i].ToString());//Getting Exception here
                    enrollDetails.TrainerID = Convert.ToInt32(Session["user"].ToString());
                    enrollDetails.dt = DateTime.Now;
                    db.EnrollTrainee.Add(enrollDetails);
                    db.SaveChanges();
                    i++;
                }

            }
        }
        populatelistbox();
        return View();
    }
}

Durante la primera iteración, funciona bien y también guarda el resultado de la primera iteración en mi base de datos. Pero cuando comienza la segunda iteración, me da la excepción anterior.

preguntado el 08 de septiembre de 12 a las 09:09

Supongo que necesitas: enrollDetails.TraineeID = Convert.ToInt32(item); -

1 Respuestas

Usaste mal la variable de bucle, supongo que necesitas:

enrollDetails.TraineeID = Convert.ToInt32(item);

Déjame explicarte por qué tu código original item[i].ToString() no funcionó:

Supongamos que tienes la lista. "2,1,3" luego, con la división de cadenas, ha creado la matriz de cadenas: new [] { "2", "1", "3" }

Luego en tu ciclo

  1. En la primera iteración

    • ít fue "2"
    • i fue 0

    So item[i] resuelto en "2"[0] cual es "2" Y funcionó.

  2. En la segunda iteración

    • ít fue "1"
    • i fue 1

    y su código resuelto en "1"[1] que arrojó una excepción porque "1" tiene solo un carácter de largo, por lo que el índice estaba fuera de los límites de la matriz.

Respondido el 08 de Septiembre de 12 a las 10:09

no entendí tu Un carácter largo punto. - RL89

las cadenas son básicamente una matriz de caracteres. Entonces la cuerda "test" puede expresarse como la matriz de 't','e','s','t' caracteres En C# todas las matrices están indexadas desde 0. Entonces con el "1"[1] quieres conseguir el segundo elemento forma la matriz de caracteres que tiene solo un carácter '1'. - nemesv

Sí, entendiste tu punto. Si voy a escribir en lugar de ít artículo [0] entonces supongo que también funcionará. - RL89

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.