2011-01-15 20 views
19

Soy totalmente nuevo en C# y estoy aprendiendo sobre la marcha. Estoy atascado en un problema que espero que un programador experimentado pueda ayudar. He agregado un CheckedListBox a mi formulario y le agregué una colección de 6 ítems. Necesito todo menos el último elemento seleccionado para tener una coma junto a él, así que mi pregunta es: ¿cómo puedo decirle a C# que NO coloque una coma al lado del último elemento seleccionado?C# Cómo colocar una coma después de cada palabra, pero la última en la lista

foreach (object itemChecked in RolesCheckedListBox.CheckedItems) 
{ 
    sw.Write(itemChecked.ToString() + ","); 
} 

Gracias por cualquier ayuda recibida! Dan

+0

Recomendaría usar una cadena en lugar del bucle foreach como en mi solución. – Tillito

+0

Vea una mejor respuesta en esto: http://stackoverflow.com/questions/11771741/how-to-remove-last-comma-from-query-c-sharp –

Respuesta

6

Una manera de mejorar su ejemplo podría ser:

var index = 0; 
foreach (object itemChecked in RolesCheckedListBox.CheckedItems) 
{ 
    if (index>0) sw.Write(","); 
    sw.Write(itemChecked.ToString()); 
    index++; 
} 

No es elegante, pero trabajando.

+2

¡Gracias esto funcionó! –

44

Se puede hacer uso de string.Join() método:

string commaSeparated = string.Join(",", 
       RolesCheckedListBox.CheckedItems.Select(item => item.ToString()); 

Por ejemplo:

string[] names = new []{ "a", "b"}; 
string separatedNames = string.Join(",", names); 

dará como resultado que separatedNames habrá "a,b"

+2

'Seleccionar' solo se define para' IEnumerable 'por lo que debe poner' Cast () 'después de CheckedItems ya que solo implementa' IEnumerable'. – Lee

+0

@Lee, buen punto, RolesCheckedListBox.CheckedItems.Cast () .Select (item => item.ToString()) puede ser necesario – Elisha

+0

Sí. Tal vez mi solución sea mejor legible que – Tillito

4

usted podría utilizar la función Join en lugar de lo oping:

sw.Write(string.Join(",", RolesCheckedListBox.CheckedItems)); 
0
foreach (object itemChecked in RolesCheckedListBox.Items) 
      { 
       if (itemChecked != RolesCheckedListBox.Items[RolesCheckedListBox.Items.Count - 1]) 
        sw.Write(itemChecked.ToString() + ","); 
      } 

que deben ayudarle. Además, acabo de utilizar "Artículos", usó CheckedItems. Cambie todas las instancias de elementos para CheckedItems si desea solo iterar a través de elementos marcados.

+0

Gracias a todos por sus respuestas rápidas. ¡Esto ha funcionado! –

1
  1. transformar su ListItemCollection a una matriz de cadenas usando LINQ
  2. uso string.join

igual:

public string ItemsToString(ListItemCollection items) 
{ 
    string[] stringArray = (from ListItem item in items where item.Selected select item.ToString()).ToArray(); 
    return String.Join(", ", stringArray); 
} 

se podría utilizar por

sw.Write(ItemsToString(RolesCheckedListBox.CheckedItems)); 

O si prefieres un singl Línea E para el trabajo:

sw.Write(String.Join(", ", (from ListItem item in RolesCheckedListBox.CheckedItems select item.ToString()).ToArray())); 
+0

¡Muy bonito! ¡Resuelve el problema de las principales comas en dos líneas de código! –

1

En .Net 4 se puede utilizar estática String.Join<T> Method (String, IEnumerable<T>) e imprime una secuencia concatenada.

De lo contrario el camino más fácil es para anteponer coma para todos los elementos, pero el primero de ellos:

bool shouldPrependComma = false; 
foreach (object itemChecked in RolesCheckedListBox.CheckedItems) 
{ 
    if (shouldPrependComma) sw.Write(","); 
    sw.Write(itemChecked.ToString()); 
    shouldPrependComma = true; 
} 
Cuestiones relacionadas