Almacenar diferentes cantidades de valores en un objeto int[]

Necesito almacenar diferentes cantidades de valores en un int[] matriz, dependiendo de cuántos elementos se han seleccionado de mi CheckboxList control (cblSections).

Por el momento estoy almacenando estos valores en un ArrayList, luego determinar la longitud de este objeto y establecer el tamaño de mi int[] objeto dependiente de eso.

¿Hay una mejor manera de hacer esto, que implica menos código (¡y menos objetos!)?

ArrayList alSectionId = new ArrayList();
foreach (ListItem item in cblSections.Items) {
    if (item.Selected) {
        alSectionId.Add(item.Value);
    }
}

int[] sectionId = new int[(alSectionId.Count - 1) + 1];

if (alSectionId.Count > 0) {
    int i = 0;
    foreach (int sId in alSectionId) {
        sectionId[i] = sId;
        i += 1;
    }
}

preguntado el 31 de julio de 12 a las 11:07

Cualquier motivo por el que necesite un int[] al final en lugar de un List<int>? Cualquier razón que estés usando ArrayList en lugar de List<int> ¿en absoluto? -

@JonSkeet int[] es el tipo de datos que se utiliza en el Modelo, pero esto podría cambiarse si List<int> es una mejor alternativa? De hecho, estoy escribiendo este código en VB.NET, así que volveré a convertir cualquier cosa a esto después, pero preferiría aprender la forma de C#. -

¿Solo usa el objeto ArrayList para contar el tamaño de la matriz int? -

¿Qué estás haciendo con sectionId en otra parte del código? Es posible que ni siquiera necesite un int[]. -

@Curt: Bueno List<int> es una alternativa generalmente más flexible, sí... -

2 Respuestas

Se podría utilizar:

int numSelected = cblSections.Items.Count(x => x.Selected);

También podría producir su matriz inmediatamente:

int[] sectionId = cblSections.Items
    .Where(x => x.Selected)
    .Select(x => x.Value)
    .ToArray();

Respondido 31 Jul 12, 11:07

+1 Saludos David, este es un método mucho más ordenado, pero voy a usar el List<int> método ya que este parece ser un mejor tipo de datos para usar para lo que estoy tratando de lograr: Curtis

@curt: dulce, entonces solo usa ToList en lugar de ToArray. (y actualizar la definición de variable, por supuesto) - david hedlund

Se debe utilizar la List objeto en su lugar. Luego, una vez que haya rellenado esto, puede convertirlo directamente en un int[] usando el ToArray() función:

List<int> items = new List<int>();
items.ToArray();

NOTA: Aunque el ArrayList la clase también parece tener un ToArray() función, es mejor usar List de todos modos... ¿por qué? No tengo idea, es una de esas cosas que he escuchado tantas veces que simplemente lo doy por sentado y olvido la razón original por la cual :/

Respondido 31 Jul 12, 11:07

¿Qué tal "porque ArrayList no es seguro para tipos"? :) - jon skeet

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