В PerlЧто такое эквивалент C# оператора повторения Perl?
print "a" x 3; # aaa
В C#
Console.WriteLine(???)
В PerlЧто такое эквивалент C# оператора повторения Perl?
print "a" x 3; # aaa
В C#
Console.WriteLine(???)
Это зависит от того, что вам нужно ... есть 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))
Работает только для «новой строки (CHAR, COUNT)», а не для строк. – Tom
Правда, но он отвечает требованиям в вопросе. – GeekyMonkey
Итак, оператор повторения Perl работает только на символах? Тот факт, что он использовал строку, состоящую из одного символа, не должен был отключать вас, чтобы ограничить ответ на этот конкретный пример. Вопрос был более общим. – Tom
Если вам нужно сделать это со строками, как указал Том, тогда метод расширения сделает работу красиво.
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 будет более эффективным. – GeekyMonkey
Ну во все версию .NET повторить строку, вы всегда можете сделать это
public static string Repeat(string value, int count)
{
return new StringBuilder().Insert(0, value, count).ToString();
}
Marc вы не думаете StringBuilder(). Вставьте (0, значение, количество) лучше? –
Хорошее место; просто не видел перегрузки ... –