Лучший способ повторить символ в строке C#
Основной способ: метод string.Concat и Enumerable.Repeat
В C# нет оператора умножения для строк, как в Python, но есть несколько элегантных и производительных решений. Самый популярный и рекомендуемый способ — комбинация Enumerable.Repeat и string.Concat:
using System;
using System.Linq;
string result = string.Concat(Enumerable.Repeat('A', 10));
Console.WriteLine(result); // Вывод: AAAAAAAAAA
Этот подход работает начиная с .NET Framework 3.5. Он лаконичен, читаем и использует LINQ, который знаком большинству разработчиков.
Специализированный метод string.Create (для .NET Core 2.1+ и .NET 5+)
Если вам нужна максимальная производительность и вы работаете на современных версиях .NET, используйте string.Create. Этот метод выделяет память под строку и позволяет заполнить её через делегат:
string result = string.Create(10, 'A', (span, ch) => span.Fill(ch));
Console.WriteLine(result); // Вывод: AAAAAAAAAA
Этот способ очень быстрый, так как работает напрямую с памятью (Span<T>) и не создаёт временных объектов.
Классический StringBuilder
Если вы предпочитаете старый добрый StringBuilder, он тоже подходит, особенно когда нужно накапливать строку в несколько этапов:
var sb = new StringBuilder(10);
sb.Append('A', 10);
string result = sb.ToString();
Console.WriteLine(result); // Вывод: AAAAAAAAAA
Обратите внимание на перегрузку Append(char, int) — она специально создана для повторения символа.
Сравнение производительности
Для 10 повторений разница незаметна, но для больших значений (например, 100 000 символов) результаты будут такими (от быстрого к медленному):
- string.Create — самый быстрый, минимум аллокаций
- StringBuilder.Append(char, int) — почти так же быстр
- string.Concat + Enumerable.Repeat — чуть медленнее из-за LINQ
- Цикл с конкатенацией (+=) — очень медленный, избегайте его для больших строк
Самый простой вариант для новичков
Я рекомендую начинающим использовать string.Concat(Enumerable.Repeat(...)) — он интуитивно понятен и не требует глубоких знаний о Span. Для продакшена с большими объёмами данных — string.Create или StringBuilder.
Также в .NET 6+ появился метод string.PadLeft/PadRight, но он не совсем для этой задачи — он добавляет символы до определённой длины, а не создаёт строку из повторений.
Альтернативный подход: конструктор строки через массив char
Ещё один простой способ — создать массив символов нужной длины и инициализировать его:
char[] chars = new char[10];
Array.Fill(chars, 'A');
string result = new string(chars);
Console.WriteLine(result); // AAAAAAAAAA
Этот метод очень нагляден: вы явно создаёте массив, заполняете его и превращаете в строку. Он работает быстро и не требует LINQ. Минус — нужно помнить про создание массива, что даёт дополнительную аллокацию, но для большинства задач это не критично.
Когда использовать
- Если вы пишете код для .NET Framework (где нет
string.Create) — это отличная альтернатива - Если нужно заполнить строку разными символами в разных позициях — массив даёт гибкость
- Для обучения: этот способ помогает понять, как строки связаны с массивами символов
Также можно использовать new string('A', 10) — это конструктор строки, который принимает символ и количество повторений. Этот способ существует с первых версий .NET и является самым коротким!
string result = new string('A', 10);
Console.WriteLine(result); // AAAAAAAAAA
Этот вариант — настоящая находка: он простой, быстрый и не требует дополнительных using. Рекомендую его как основной для повседневных задач.