2008-11-17 5 views

ответ

14

Это зависит от того, что вам нужно ... есть new string('a',3), например.

Для работы со струнами; вы могли бы просто петли ... не очень интересно, но это сработает.

С помощью 3.5 вы можете использовать Enumerable.Repeat("a",3), но это дает вам последовательность строк, а не составную строку.

Если вы собираетесь использовать это много, вы могли бы использовать на заказ метод расширения 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 вы не думаете StringBuilder(). Вставьте (0, значение, количество) лучше? –

+0

Хорошее место; просто не видел перегрузки ... –

5

Если вам нужно только повторить один символ (как в вашем примере), то это будет работать :

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

Работает только для «новой строки (CHAR, COUNT)», а не для строк. – Tom

+0

Правда, но он отвечает требованиям в вопросе. – GeekyMonkey

+0

Итак, оператор повторения Perl работает только на символах? Тот факт, что он использовал строку, состоящую из одного символа, не должен был отключать вас, чтобы ограничить ответ на этот конкретный пример. Вопрос был более общим. – Tom

-1

Если вам нужно сделать это со строками, как указал Том, тогда метод расширения сделает работу красиво.

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

Для работы в таком цикле было бы целесообразно использовать StringBuilder ... конкатенация подходит для 2 или 3, но если кто-то попросит «a» .Repeat (100), у вас много ненужных строк для собирать. –

+0

Это правда. Есть некоторый момент, когда StringBuilder становится более эффективным. Я слышал, что его около 10. В приведенном примере у него было 3, поэтому я предположил, что он будет небольшим. Если вы хотите охватить более широкий диапазон, то добавление «если» и использование StringBuilder более 10 будет более эффективным. – GeekyMonkey

5

Ну во все версию .NET повторить строку, вы всегда можете сделать это

public static string Repeat(string value, int count) 
{ 
    return new StringBuilder().Insert(0, value, count).ToString(); 
} 
Смежные вопросы