2008-11-17 10 views

Respuesta

14

depende de lo que necesita ... hay new string('a',3) por ejemplo.

Para trabajar con cadenas; podrías hacer bucles ... no muy interesante, pero funcionará.

Con 3.5, puede usar Enumerable.Repeat("a",3), pero esto le da una secuencia de cadenas, no una cadena compuesta.

Si se va a utilizar mucho en esto, se puede utilizar una medida método de extensión de C# 3.0:

static void Main() 
    { 
     string foo = "foo"; 
     string bar = foo.Repeat(3); 
    } 
    // stuff this bit away in some class library somewhere... 
    static string Repeat(this string value, int count) 
    { 
     if (count < 0) throw new ArgumentOutOfRangeException("count"); 
     if (string.IsNullOrEmpty(value)) return value; // GIGO    
     if (count == 0) return ""; 
     StringBuilder sb = new StringBuilder(value.Length * count); 
     for (int i = 0; i < count; i++) 
     { 
      sb.Append(value); 
     } 
     return sb.ToString(); 
    } 
+1

Marc no te parece StringBuilder(). Insertar (0, valor, cuenta) es mejor? –

+0

Buen lugar; simplemente no vio la sobrecarga ... –

5

Si sólo necesita repetir un solo carácter (como en el ejemplo), entonces esto va a funcionar :

Console.WriteLine(new string('a', 3)) 
+0

Solo funciona para "cadena nueva (CHAR, COUNT)", no para cadenas. – Tom

+0

Es cierto, pero cumple el requisito en la pregunta. – GeekyMonkey

+0

¿Entonces el operador de repetición de Perl solo funciona con caracteres? El hecho de que haya usado una cuerda compuesta por un solo personaje no debería haberle dado un puntapié para restringir la respuesta a ese ejemplo en particular. La pregunta fue más general. – Tom

-1

Si necesita hacer esto con cadenas como Tom señaló, a continuación, un método de extensión va a hacer el trabajo muy bien.

static class StringHelpers 
{ 
    public static string Repeat(this string Template, int Count) 
    { 
     string Combined = Template; 
     while (Count > 1) { 
      Combined += Template; 
      Count--; 
     } 
     return Combined; 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     string s = "abc"; 
     Console.WriteLine(s.Repeat(3)); 
     Console.ReadKey(); 
    } 
+0

Para trabajar en un ciclo como este, sería aconsejable usar StringBuilder ... la concatenación está bien para 2 o 3, pero si alguien pide "a" .Repetir (100) tiene muchas cadenas innecesarias para recoger. –

+0

Eso es verdad. Hay un momento en el que StringBuilder se vuelve más eficiente. He oído que rondan las 10. En el ejemplo dado, él tenía 3, así que supuse que sería pequeño. Si desea cubrir un rango más amplio, entonces poner un "si" y usar StringBuilder por más de 10 sería más eficiente. – GeekyMonkey

5

bien en todas las versiones de .NET para repetir una cadena siempre se puede hacer esto

public static string Repeat(string value, int count) 
{ 
    return new StringBuilder().Insert(0, value, count).ToString(); 
} 
Cuestiones relacionadas