在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;
}
使用扩展方法怎么样?
public static class StringExtensions
{
public static string Repeat(this char chatToRepeat, int repeat) {
return new string(chatToRepeat,repeat);
}
public static string Repeat(this string stringToRepeat,int repeat)
{
var builder = new StringBuilder(repeat*stringToRepeat.Length);
for (int i = 0; i < repeat; i++) {
builder.Append(stringToRepeat);
}
return builder.ToString();
}
}
你可以这样写:
Debug.WriteLine('-'.Repeat(100)); // For Chars
Debug.WriteLine("Hello".Repeat(100)); // For Strings
注意,使用stringbuilder版本来处理简单字符而不是字符串的性能测试会给你带来很大的性能损失:
在我的电脑上,测量的性能差异是1:20:
Debug.WriteLine('-'.Repeat(1000000)) //char版本
Debug.WriteLine("-".Repeat(1000000)) //字符串版本
使用扩展方法怎么样?
public static class StringExtensions
{
public static string Repeat(this char chatToRepeat, int repeat) {
return new string(chatToRepeat,repeat);
}
public static string Repeat(this string stringToRepeat,int repeat)
{
var builder = new StringBuilder(repeat*stringToRepeat.Length);
for (int i = 0; i < repeat; i++) {
builder.Append(stringToRepeat);
}
return builder.ToString();
}
}
你可以这样写:
Debug.WriteLine('-'.Repeat(100)); // For Chars
Debug.WriteLine("Hello".Repeat(100)); // For Strings
注意,使用stringbuilder版本来处理简单字符而不是字符串的性能测试会给你带来很大的性能损失:
在我的电脑上,测量的性能差异是1:20:
Debug.WriteLine('-'.Repeat(1000000)) //char版本
Debug.WriteLine("-".Repeat(1000000)) //字符串版本