




Смотря что вам нужно ... есть например 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();
}
Если вам нужно повторить только один символ (как в вашем примере), это сработает:
Console.WriteLine(new string('a', 3))
Верно, но это соответствует требованию в вопросе.
Итак, оператор повторения Perl работает только с символами? Тот факт, что он использовал строку, состоящую из одного символа, не должен побуждать вас ограничивать ответ этим конкретным примером. Вопрос был более общим.
См. Другой мой ответ о том, как это сделать со строками.
Если вам нужно сделать это со строками, как указал Том, то метод расширения отлично справится с этой задачей.
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();
}
Для работы в таком цикле было бы целесообразно использовать StringBuilder ... конкатенация подходит для 2 или 3, но если кто-то запрашивает "a" .Repeat (100), у вас есть много ненужных строк для сбора .
Это правда. В какой-то момент StringBuilder становится более эффективным. Я слышал, что это около 10. В приведенном примере у него было 3, поэтому я предположил, что это будет мало. Если вы хотите охватить более широкий диапазон, то использование «если» и использование StringBuilder более 10 будет более эффективным.
Ну, во всех версиях .NET, чтобы повторить строку, вы всегда можете сделать это
public static string Repeat(string value, int count)
{
return new StringBuilder().Insert(0, value, count).ToString();
}
Марк, тебе не кажется, что StringBuilder (). Insert (0, value, count) лучше?