signo - C#Cómo colocar una coma después de cada palabra pero la última en la lista
puede ir una coma antes de un signo de exclamacion (9)
- transforme su ListItemCollection en una matriz de cadenas usando linq
- utilizar String.Join
Me gusta:
public string ItemsToString(ListItemCollection items)
{
string[] stringArray = (from ListItem item in items where item.Selected select item.ToString()).ToArray();
return String.Join(", ", stringArray);
}
Podrías usarlo por
sw.Write(ItemsToString(RolesCheckedListBox.CheckedItems));
O si prefieres una sola línea para el trabajo:
sw.Write(String.Join(", ", (from ListItem item in RolesCheckedListBox.CheckedItems select item.ToString()).ToArray()));
Soy totalmente nuevo en C # y aprendiendo sobre la marcha. Estoy atascado en el tema que espero que un programador experimentado pueda ayudar. He agregado un CheckedListBox a mi formulario y le agregué una colección de 6 artículos. Necesito que todos, excepto el último elemento seleccionado, tengan una coma al lado, así que mi pregunta es: ¿cómo puedo decir a C # NO que coloque una coma junto al último elemento seleccionado?
foreach (object itemChecked in RolesCheckedListBox.CheckedItems)
{
sw.Write(itemChecked.ToString() + ",");
}
Gracias por cualquier ayuda recibida! Dan
Aquí hay algunos artículos que escribí sobre este problema:
http://blogs.msdn.com/b/ericlippert/archive/2009/04/13/restating-the-problem.aspx
http://blogs.msdn.com/b/ericlippert/archive/2009/04/15/comma-quibbling.aspx
Los comentarios al segundo artículo tienen docenas de soluciones a una versión un poco más difícil del problema; es educativo buscar esas soluciones y ver cuáles te parecen elegantes y cuáles groseras.
En .Net 4 puede utilizar el string.Join() estático string.Join() e imprimir una cadena concatenada.
De lo contrario, la forma más fácil es anteponer una coma a todos los elementos, pero el primero:
bool shouldPrependComma = false;
foreach (object itemChecked in RolesCheckedListBox.CheckedItems)
{
if (shouldPrependComma) sw.Write(",");
sw.Write(itemChecked.ToString());
shouldPrependComma = true;
}
En 4.0, simplemente puede usar string.Join() que llama al método ToString () para todos los valores no nulos:
var commaSeparated = string.Join(",", RolesCheckedListBox.CheckedItems);
Jon Skeet implementó SmartEnumerable para este tipo de problema.
Puedes usar la función Join lugar de hacer un bucle:
sw.Write(string.Join(",", RolesCheckedListBox.CheckedItems));
Se puede hacer usando el método string.Join() :
string commaSeparated = string.Join(",",
RolesCheckedListBox.CheckedItems.Select(item => item.ToString());
Por ejemplo:
string[] names = new []{ "a", "b"};
string separatedNames = string.Join(",", names);
Resultará que los separatedNames
serán "a,b"
Una forma 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 elegante, pero trabajando.
foreach (object itemChecked in RolesCheckedListBox.Items)
{
if (itemChecked != RolesCheckedListBox.Items[RolesCheckedListBox.Items.Count - 1])
sw.Write(itemChecked.ToString() + ",");
}
Eso debería ayudarte. Además, solo usé "Artículos", usaste CheckedItems. Cambie todas las instancias de elementos a elementos comprobados si solo desea iterar a través de elementos comprobados.