2008-11-17 5 views

Répondre

14

Cela dépend de ce dont vous avez besoin ... il y a new string('a',3) par exemple.

Pour travailler avec des cordes; vous pourriez juste boucler ... pas très intéressant, mais ça marchera. Avec 3.5, vous pouvez utiliser Enumerable.Repeat("a",3), mais cela vous donne une séquence de chaînes, pas une chaîne composée.

Si vous allez utiliser beaucoup, vous pouvez utiliser une méthode sur mesure C extension # 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 ne pas vous pensez StringBuilder(). Insert (0, valeur, compte) est le meilleur? –

+0

Bon endroit; simplement n'a pas vu la surcharge ... –

5

Si vous avez seulement besoin de répéter un seul caractère (comme dans votre exemple), alors cela fonctionnera :

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

Ne fonctionne que pour "nouvelle chaîne (CHAR, COUNT)", pas pour les chaînes. – Tom

+0

C'est vrai, mais cela répond à l'exigence de la question. – GeekyMonkey

+0

Alors l'opérateur de répétition de Perl ne travaille que sur les caractères? Le fait qu'il ait utilisé une chaîne composée d'un seul caractère ne devrait pas vous avoir empêché de restreindre la réponse à cet exemple particulier. La question était plus générale. – Tom

-1

Si vous devez le faire avec des chaînes comme indiqué par Tom, une méthode d'extension fera l'affaire.

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

Pour travailler dans une boucle comme celle-ci, il serait conseillé d'utiliser StringBuilder ... la concaténation est bien pour 2-ou-3, mais si quelqu'un demande "a" .Repeat (100) vous avez beaucoup de chaînes inutiles à collecte. –

+0

C'est vrai. Il y a un point dans lequel StringBuilder devient plus efficace. J'ai entendu dire que c'est environ 10. Dans l'exemple donné il en avait 3, donc j'ai supposé que ce serait petit. Si vous voulez couvrir un plus large éventail, alors mettre un "si" et utiliser StringBuilder pour plus de 10 serait plus efficace. – GeekyMonkey

5

Eh bien dans toutes les versions de .NET pour répéter une chaîne que vous pouvez toujours faire

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