2008-11-17 9 views

Odpowiedz

14

To zależy, co trzeba ... jest new string('a',3) na przykład.

Do pracy z ciągami; mógłbyś po prostu zapętlić ... niezbyt interesujące, ale zadziała.

Z wersją 3.5 można użyć Enumerable.Repeat("a",3), ale daje to ciąg ciągów, a nie ciąg złożony.

Jeśli masz zamiar użyć tego dużo, można użyć zamówienie metody C# 3.0 extension:

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 nie myślisz StringBuilder(). Wkładki (0, wartość, liczą) jest lepszy? –

+0

Dobre miejsce; po prostu nie widziałem przeciążenia ... –

5

Jeśli trzeba tylko powtórzyć pojedynczy znak (jak w przykładzie), to będzie działać :

+0

Działa tylko dla "nowego ciągu (CHAR, COUNT)", a nie dla ciągów. – Tom

+0

To prawda, ale spełnia to wymaganie w pytaniu. – GeekyMonkey

+0

Operator powtórzeń Perla działa tylko na znaki? Fakt, że użył ciągu składającego się z pojedynczego znaku, nie powinien był Cię przysłać, aby ograniczyć odpowiedź do tego konkretnego przykładu. Pytanie było bardziej ogólne. – Tom

-1

Jeśli chcesz zrobić to za pomocą łańcuchów takich jak Tom, to metoda rozszerzenia będzie dobrze działać.

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

Do pracy w pętli takiej jak ta, zalecane byłoby użycie StringBuilder ... concatenation jest w porządku dla 2-lub-3, ale jeśli ktoś prosi o "a" .Repeat (100) masz wiele niepotrzebnych ciągów do zebrać. –

+0

To prawda. Istnieje pewien moment, w którym StringBuilder staje się bardziej wydajny. Słyszałem, że jest około 10. W podanym przykładzie miał 3, więc zakładałem, że będzie mały. Jeśli chcesz objąć szerszy zakres, wówczas wprowadzenie "jeśli" i użycie StringBuilder dla ponad 10 będzie bardziej wydajne. – GeekyMonkey

5

dobrze we wszystkich wersji .NET powtórzyć ciąg zawsze można to zrobić

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