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, 5
pero 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
groupIds
con 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[] { ',' });
lastrgroupids
cadena 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 character
está 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.TrimEnd
serí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 queg
es astring[]
. ¡Dale un mejor nombre queg
tambié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
ForEach
aquí 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.Join
es 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.Join
es mejor, pero si realmente quieres un LINQForEach
:Algunas notas:
string.Join
yforeach
son 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 cadenasStringBuilder
debe considerar en lugar de concatenar cadenasfuente
if(strgroupids != string.Empty){
ForEach
;foreach (var g in groupIds) {
funciona igual de bien :)