Tengo lo siguiente
data.AppendFormat("{0},",dataToAppend);
El problema con esto es que lo estoy usando en un bucle y habrá una coma de prueba. ¿Cuál es la mejor forma de eliminar la coma al final?
¿Tengo que cambiar los datos a una cadena de la subcadena?
c#
stringbuilder
Wesley Skeen
fuente
fuente
string.Join(",", yourCollection)
? Editar: agregado como respuesta.Respuestas:
La forma más sencilla y eficaz es ejecutar este comando:
al hacer esto, mueve el puntero (es decir, el último índice) hacia atrás un carácter, pero no cambia la mutabilidad del objeto. De hecho,
StringBuilder
es mejor borrar aLength
también (pero en realidad use elClear()
método para mayor claridad porque así es como se ve su implementación):de nuevo, porque no cambia la tabla de asignación. Piense en ello como si dijera que ya no quiero reconocer estos bytes. Ahora, incluso al llamar
ToString()
, no reconocerá nada más allá de suLength
, bueno, no puede. Es un objeto mutable que asigna más espacio del que le proporcionas, simplemente está construido de esta manera.fuente
data.Length = 0;
: eso es exactamente lo queStringBuilder.Clear
hace, por lo que es preferible usarloStringBuilder.Clear
para tener claridad de intención.Clear()
hace, pero es gracioso. Esa es la primera línea delClear()
método. Pero, ¿sabía que la interfaz en realidad emite unreturn this;
. Eso es lo que me mata. Configurando losLength = 0
cambios la referencia que ya tienes, ¿por qué regresar tú mismo?Append
regresa a sí mismo también.Solo usa
De esta manera no necesitas el
StringBuilder
y el bucle.Adición larga sobre el caso asincrónico. A partir de 2019, no es una configuración rara cuando los datos llegan de forma asincrónica.
En caso de que sus datos estén en una recopilación asíncrona, no hay
string.Join
sobrecargaIAsyncEnumerable<T>
. Pero es fácil crear uno manualmente, pirateando el código destring.Join
:Si los datos llegan de forma asincrónica pero la interfaz
IAsyncEnumerable<T>
no es compatible (como se menciona en los comentariosSqlDataReader
), es relativamente fácil envolver los datos en unIAsyncEnumerable<T>
:y usarlo:
Para poder usarlo
Select
, necesitará usar nuget packageSystem.Interactive.Async
. Aquí puede encontrar un ejemplo compilable.fuente
string.Join(",", yourCollection)
todavía tiene un,
al final. por lo que lo anterior,string.Join(",", yourCollection)
es decir, es ineficiente y no lo elimina por sí solo.Utilice lo siguiente después del ciclo.
o simplemente cambia a
fuente
string.Join(",", input)
Qué tal esto..
fuente
Prefiero manipular la longitud del constructor de cadenas:
fuente
data.Length--
o--data.Length
?--
o++
puede usarlodata.Length -= 1
, o esta respuesta también funcionará.Te recomiendo que cambies tu algoritmo de bucle:
fuente
Debe usar el
string.Join
método para convertir una colección de elementos en una cadena delimitada por comas. Se asegurará de que no haya comas al principio o al final, así como también garantizará que la cadena se construya de manera eficiente (sin cadenas intermedias innecesarias).fuente
Sí, conviértalo en una cadena una vez que finalice el ciclo:
fuente
Tienes dos opciones. El primero es un
Remove
método de uso muy fácil , es bastante efectivo. La segunda forma es usarToString
con índice inicial y índice final ( documentación de MSDN )fuente
Pregunta SO similar aquí.
Me gustó el uso de un método de extensión StringBuilder.
Eliminar último método
fuente
La forma más sencilla sería utilizar el método Join ():
Si realmente necesita StringBuilder, recorte la coma final después del bucle:
fuente
data.ToString().TrimEnd(',');
es ineficiente