Supongamos que tengo una cadena, por ejemplo,
string snip = "</li></ul>";
Básicamente, quiero escribirlo varias veces, dependiendo de algún valor entero.
string snip = "</li></ul>";
int multiplier = 2;
// TODO: magic code to do this
// snip * multiplier = "</li></ul></li></ul>";
EDITAR: Sé que puedo escribir fácilmente mi propia función para implementar esto, me preguntaba si había algún operador de cadena extraño que no conociera
c#
string
extension-methods
A pesar de
fuente
fuente
Respuestas:
En .NET 4 puedes hacer esto:
fuente
operator*
representa el binario . A cada uno lo suyo, supongo.Tenga en cuenta que si su "cadena" es solo un carácter, hay una sobrecarga del constructor de cadenas para manejarlo:
fuente
Desafortunadamente / afortunadamente, la clase de cadena está sellada, por lo que no puede heredarla y sobrecargar el operador *. Sin embargo, puede crear un método de extensión:
fuente
Estoy con DrJokepu en este caso , pero si por alguna razón quisiste hacer trampa usando la funcionalidad incorporada, entonces podrías hacer algo como esto:
O, si está utilizando .NET 4:
Sin embargo, personalmente no me molestaría: un método de extensión personalizado es mucho mejor.
fuente
Solo por completo, aquí hay otra forma de hacer esto:
Creo que lo saqué de Stack Overflow hace algún tiempo, así que no es mi idea.
fuente
Tendría que escribir un método; por supuesto, con C # 3.0 podría ser un método de extensión:
luego:
fuente
string.Join
, ¿por qué no simplemente recorrer n veces? Mucho más directo.Un poco tarde (y solo por diversión), si realmente desea utilizar el
*
operador para este trabajo, puede hacer esto:Y entonces:
Tenga en cuenta que, siempre y cuando usted es capaz de encontrar un comportamiento razonable para ellos, también puede manejar otros operadores a través de
StringWrap
la clase, como\
,^
,%
etc ...PD:
Multiply()
créditos de extensión a @DrJokepu todos los derechos reservados ;-)fuente
Esto es mucho más conciso:
El espacio de nombres
using System.Text;
debe importarse en este caso.fuente
fuente
Si tiene .Net 3.5 pero no 4.0, puede usar System.Linq's
fuente
String.Concat
, y en 3.5 también necesitarías.ToArray()
. No es la solución más elegante, me temo.Como todos están agregando sus propios ejemplos .NET4 / Linq, también podría agregar el mío. (Básicamente, es DrJokepu, reducido a una frase)
fuente
Bien, aquí está mi opinión sobre el asunto:
Estoy siendo un poco tonto, por supuesto, pero cuando necesito tener tabulación en clases generadoras de código, Enumerable.Repeat lo hace por mí. Y sí, la versión StringBuilder también está bien.
fuente
Aquí está mi opinión sobre esto solo para referencia futura:
fuente
ParallelEnumerable
en situaciones como esta.string.Join
necesita usar los elementos en orden, por lo que no es necesario paralelizar su generación.