在c#中生成一串\t的最好方法是什么

我正在学习c#,尝试用不同的方式说同一件事。

Tabs(uint t)是一个返回t个\t的字符串的函数

例如Tabs(3)返回"\t\t\t"

这三种实现Tabs(uint numTabs)的方法中哪一种是最好的?

当然,这取决于“最好”是什么意思。

LINQ版本只有两行,这很好。但是对Repeat和Aggregate的调用是否会不必要地消耗时间/资源? StringBuilder版本非常清楚,但StringBuilder类是否更慢? 字符串版本是基本的,这意味着它很容易理解。 这一点关系都没有吗?他们都是平等的吗?

这些都是帮助我更好地理解c#的问题。

private string Tabs(uint numTabs)
{
    IEnumerable<string> tabs = Enumerable.Repeat("\t", (int) numTabs);
    return (numTabs > 0) ? tabs.Aggregate((sum, next) => sum + next) : ""; 
}  

private string Tabs(uint numTabs)
{
    StringBuilder sb = new StringBuilder();
    for (uint i = 0; i < numTabs; i++)
        sb.Append("\t");

    return sb.ToString();
}  

private string Tabs(uint numTabs)
{
    string output = "";
    for (uint i = 0; i < numTabs; i++)
    {
        output += '\t';
    }
    return output; 
}

当前回答

string.Concat(Enumerable.Repeat("ab", 2));

返回

“阿巴”

And

string.Concat(Enumerable.Repeat("a", 2));

返回

“啊”

从…

.net中是否有重复字符串或char的内置函数?

其他回答

在所有版本的。net中,你都可以这样重复一个字符串:

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

要重复一个字符,new String('\t', count)是最好的选择。请看@CMS的回答。

我知道这个问题已经存在5年了,但是有一种简单的方法可以重复一个字符串,甚至在。net 2.0中也可以工作。

重复一个字符串:

string repeated = new String('+', 3).Replace("+", "Hello, ");

返回

“你好,你好,你好。”

将字符串作为数组重复使用:

// Two line version.
string repeated = new String('+', 3).Replace("+", "Hello,");
string[] repeatedArray = repeated.Split(',');

// One line version.
string[] repeatedArray = new String('+', 3).Replace("+", "Hello,").Split(',');

返回

{"Hello", "Hello", "Hello", ""}

保持简单。

使用字符串。Concat和Enumerable。重复这样做会更便宜 而不是使用String。加入

public static Repeat(this String pattern, int count)
{
    return String.Concat(Enumerable.Repeat(pattern, count));
}

扩展方法:

public static string Repeat(this string s, int n)
{
    return new String(Enumerable.Range(0, n).SelectMany(x => s).ToArray());
}

public static string Repeat(this char c, int n)
{
    return new String(c, n);
}

您可以创建一个扩展方法

static class MyExtensions
{
    internal static string Repeat(this char c, int n)
    {
        return new string(c, n);
    }
}

然后你可以这样使用它

Console.WriteLine('\t'.Repeat(10));