Estoy recuperando mucha información en una lista, vinculada a una base de datos y quiero crear una cadena de grupos, para alguien que esté conectado al sitio web.
Lo uso para probar pero esto no es dinámico, por lo que es realmente malo:
string strgroupids = "6";
Quiero usar esto ahora. Pero la cadena devuelta es algo así como1,2,3,4,5,
groupIds.ForEach((g) =>
{
strgroupids = strgroupids + g.ToString() + ",";
strgroupids.TrimEnd(',');
});
strgroupids.TrimEnd(new char[] { ',' });
Quiero eliminar ,después, 5pero definitivamente no funciona.

strgroupids = strgroupids.TrimEnd(new char[] { ',' });pero hay mejores ideas a continuación.Respuestas:
MSDN:
fuente
¿Qué hay de hacerlo de esta manera?
Un montón más limpio.
Agregará todos los elementos dentro
groupIdscon un','entre cada uno, pero no pondrá un','al final.fuente
Las cadenas en c # son inmutables. Cuando en su código lo hace
strgroupids.TrimEnd(',');ostrgroupids.TrimEnd(new char[] { ',' });lastrgroupidscadena no se modifica .Necesitas hacer algo como en su
strgroupids = strgroupids.TrimEnd(',');lugar.Para citar desde aquí :
fuente
Agregar un método de extensión.
luego use:
fuente
int n, el número de caracteres para eliminar al final. En segundo lugar, prueba la longitud cero, pero eso no elimina todas las excepciones posibles. Sería mejor hacerloint index = ..LastIndexOf.., entoncesif (index >= 0).string characterestá mal nombrado. Cuarto, no es inmediatamente obvio para los futuros programadores que esto está eliminando caracteres al final de la cadena. Oh, espera, no necesariamente lo está haciendo. Está buscando la cadena. Podría estar eliminando de algún lugar en el medio. Ahora el programador de mantenimiento tiene que examinar todos los usos del método, para ver qué estaba tratando de lograr. No es un buen método para llamar, por esta simple necesidad de eliminar del final de una cadena. Perdón por todas las críticas; Lo hago para cualquiera que adopte este método, para que entiendan.String.TrimEndsería más apropiado de usar. Pero espere, eso ya existe, y se mencionó en la pregunta original y en varias otras respuestas hace 3 años, ¡no es necesario inventar un nuevo método! ¿Cuál es el beneficio de su enfoque?Elimina cualquier coma final:
Sin embargo, esto es al revés, usted escribió el código que agrega la coma en primer lugar. En su
string.Join(",",g)lugar, debe usar , suponiendo queges astring[]. ¡Dale un mejor nombre quegtambién!fuente
Como alternativa a agregar una coma para cada elemento, puede usar String.Join:
Esto agregará el separador ("," en este caso) entre cada elemento de la matriz.
fuente
Tenga en cuenta que el uso de
ForEachaquí normalmente se considera "incorrecto" (lea, por ejemplo, http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx )Usando algunos LINQ:
Sin subcadena final:
fuente
string.Joines perfecto SI tienes una serie de cadenas como fuente O tienes C # 4.0Adicional a la solución de sll: es mejor recortar la cadena en caso de que haya algunos espacios en blanco al final.
fuente
string.Joines mejor, pero si realmente quieres un LINQForEach:Algunas notas:
string.Joinyforeachson ambos mejores que este enfoque, mucho más lento,ya que nunca se adjunta+=) es útil para agregar cadenas.ToString()es innecesario ya que se llama automáticamente al concatenar sin cadenasStringBuilderdebe considerar en lugar de concatenar cadenasfuente
if(strgroupids != string.Empty){ForEach;foreach (var g in groupIds) {funciona igual de bien :)