C#中重复操作符与Perl中的等效操作符是什么?

7
在 Perl 中:
print "a" x 3;  # aaa

在C#中,

Console.WriteLine( ??? )
4个回答

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().Insert(0, value, count) 更好吗? - Binoj Antony

5

如果你只需要重复一个字符(就像你的例子一样),那么这将起作用:

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

真的,但它满足了问题的要求。 - GeekyMonkey
所以 Perl 的重复运算符只适用于字符吗?他使用的仅是一个字符构成的字符串,这一事实不应该提示你将答案限制在特定的例子中。这个问题更加通用。 - Tom
请参见我的另一条回复,了解如何使用字符串完成此操作。 - GeekyMonkey

5

在所有版本的.NET中,您都可以使用以下方式重复一个字符串:

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

-1

如果你需要像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),你将有大量不必要的字符串需要收集。 - Marc Gravell
没错。有一些情况下,使用 StringBuilder 更有效率。我听说大约是在 10 左右。在给出的例子中,他只有 3,因此我假设它会比较小。如果你想涵盖更广泛的范围,则可以加入一个 "if" 语句,并在超过 10 的情况下使用 StringBuilder 更有效率。 - GeekyMonkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接