ultimos - obtener cadena c#
¿Cómo anexar dos constructores de cadenas? (6)
¿Hay una manera de agregar dos constructores de cadena? Y si es así, ¿se desempeña mejor que agregando una cadena a un StringBuilder?
Así....
StringBuilder sb = new StringBuilder();
StringBuilder sb1 = new StringBuilder();
sb.Append(sb1.ToString());
Esto lo hará sin asignaciones.
StringBuilder sb = new StringBuilder("aaaa");
StringBuilder second = new StringBuilder("bbbbb");
sb.EnsureCapacity(sb.Length + second.Length);
for (int i = 0; i < second.Length; i++)
{
sb.Append(second[i]);
}
No necesita llamar a .ToString (). Simplemente debe añadir uno a otro. Eso es todo. Será mejor contra la llamada directa .ToString () por la siguiente razón:
1) StringBuilder no tiene un constructor con StringBuilder como param, string, int / string, etc. StringBuilder reemplaza a .ToString () y como resultado:
StringBuilder sb1 = new StringBuilder("1");
sb1.Append(new StringBuilder("2"));
Console.WriteLine(sb1);
ese código llamará automáticamente a la versión anulada de .ToString (). La salida será "12";
2) Si StringBuilder se agregará como parámetro entrante a los constructores de StringBuilder en las próximas versiones del marco, su código estará claro y listo para ser agregado correctamente sin ninguna refactorización.
¡Tenga un buen día!
Sé que esto es tres años después, pero .NET 4 StringBuilder
comporta de manera diferente de todos modos.
Sin embargo, todavía vuelve a "¿qué quieres hacer?" ¿Está buscando simplemente la forma más eficaz de agregar dos StringBuilders
y continuar con el último resultado? ¿O espera continuar trabajando con el valor almacenado en búfer existente del StringBuilder
añadido?
Para los primeros, y siempre en .NET 4,
frontStringBuilder.Append(backStringBuilder);
es mejor.
Para el último escenario en .NET 2 / 3.5,
frontStringBuilder.Append(backStringBuilder.ToString(0, backStringBuilder.Length));
es mejor (y no afectará el rendimiento en .NET 4).
Si el StringBuilder es grande, esto minimizará las asignaciones de cadenas (especialmente si puede proporcionar un búfer de caracteres reutilizable):
public static void CopyTo(this StringBuilder source, StringBuilder dest)
{
char[] buffer = new char[Math.Min(source.Length, 1024)];
CopyTo(source, dest, buffer);
}
public static void CopyTo(this StringBuilder source, StringBuilder dest, char[] buffer)
{
dest.EnsureCapacity(dest.Length + source.Length);
for (int i = 0; i < source.Length; i += buffer.Length)
{
int charCount = Math.Min(source.Length - i, buffer.Length);
source.CopyTo(i, buffer, 0, charCount);
dest.Append(buffer, 0, charCount);
}
}
Simplemente así:
firstStringBuilder.Append(secondStringBuilder.ToString());