什么\t
是在C#中生成字符串的最佳方法
我正在学习C#并尝试不同的方式来说同样的事情.
Tabs(uint t)
是返回的功能string
与t
的量\t
的
例如Tabs(3)
返回"\t\t\t"
这三种实施方式中哪Tabs(uint numTabs)
一种最好?
当然,这取决于"最佳"的含义.
LINQ版本只有两行,很不错.但重复和聚合的调用是否会不必要地耗费时间/资源?
该StringBuilder
版本是很清楚的,但是是StringBuilder
类莫名其妙慢?
该string
版本是基本的,这意味着它很容易理解.
这根本不重要吗?它们都是平等的吗?
这些都是帮助我更好地了解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(); …
Run Code Online (Sandbox Code Playgroud) 假设我有一个字符串,例如,
string snip = "</li></ul>";
Run Code Online (Sandbox Code Playgroud)
我想基本上写多次,取决于一些整数值.
string snip = "</li></ul>";
int multiplier = 2;
// TODO: magic code to do this
// snip * multiplier = "</li></ul></li></ul>";
Run Code Online (Sandbox Code Playgroud)
编辑:我知道我可以轻松编写自己的函数来实现这一点,我只是想知道是否有一些我不知道的奇怪的字符串运算符
c#中是否有一个函数返回给定char或string的x次.或者我必须编码吗?
我想多次重复一组字符.我知道如何用一个字符做到这一点:
string line = new string('x', 10);
Run Code Online (Sandbox Code Playgroud)
但我想要的是更像这样的东西:
string line = new string("-.", 10);
Run Code Online (Sandbox Code Playgroud)
这将导致:-.-.-.-.-.-.-.-.-.- .-.
我知道字符串构造函数不能这样做,但是在BCL中还有其他一些方法吗?其他建议?
谢谢!
可能重复:
是否有一种简单的方法可以重复多次返回字符串?
如果我想在Python中显示10次点,我可以使用:
print ".........."
Run Code Online (Sandbox Code Playgroud)
或这个
print "." * 10
Run Code Online (Sandbox Code Playgroud)
如何在C#中使用第二种方法?我试过各种变化:
Console.WriteLine("."*10);
Run Code Online (Sandbox Code Playgroud)
但他们都没有工作.谢谢.
只是我正在调查的好奇心.
问题:简单地重复(倍增,有人会说)字符串/字符n次.
我知道有这个目的的Enumerable.Repeat,但我试图在没有它的情况下做到这一点.
LINQ在这种情况下,似乎没什么用处,因为在查询像
from X in "s" select X
Run Code Online (Sandbox Code Playgroud)
的字符串 "S"正在探索等X是一个字符.同样是扩展方法,因为例如"S".Aggregate(blablabla)将再次处理角色'',而不是字符串本身.为了重复字符串,需要一些"外部",所以我认为lambdas和delegates,但是如果没有声明一个变量来赋予委托/ lambda表达式,就无法完成.
所以像定义一个函数并将其调用内联:
( (a)=>{return " "+a;} )("a");
Run Code Online (Sandbox Code Playgroud)
要么
delegate(string a){return " "+a}(" ");
Run Code Online (Sandbox Code Playgroud)
会给出一个"没有名字"错误(因此没有递归,AFAIK,甚至通过传递一个可能的lambda/delegate作为参数),并且最终甚至不能由C#创建,因为它有其局限性.
可能是我从错误的角度看这件事.有任何想法吗?
这只是一个实验,我不关心表演,关于记忆的使用......只是它是一线而且是一种自主的.也许我可以用Copy/CopyTo做一些事情,或者将它投射到其他一些系列,我不知道.反思也被接受了.
有没有办法在不重复的情况下多次插值变量?
例如:
var name = "bla";
Console.WriteLine($"foo {name:repeat:2} bar")
Run Code Online (Sandbox Code Playgroud)
打印
foo blabla bar
Run Code Online (Sandbox Code Playgroud)
我特别感兴趣的是插入几个换行符而不是{Environment.NewLine}
在插值掩码中重复几次,如下所示:
$"{Environment.NewLine}{Environment.NewLine}"
Run Code Online (Sandbox Code Playgroud) 可能重复:
是否有一种简单的方法可以重复多次返回字符串?
在Python中,您可以将这样的序列相乘
fivespaces= ' ' * 5
Run Code Online (Sandbox Code Playgroud)
在C#中是否有任何内置的等价物?(没有运算符重载或类扩展)
我想在一个基于项深度的字符串之前插入一些*,我想知道是否有一种方法可以返回重复Y次的字符串.例:
string indent = "***";
Console.WriteLine(indent.Redraw(0)); //would print nothing.
Console.WriteLine(indent.Redraw(1)); //would print "***".
Console.WriteLine(indent.Redraw(2)); //would print "******".
Console.WriteLine(indent.Redraw(3)); //would print "*********".
Run Code Online (Sandbox Code Playgroud) 我想重复.-
40次并将其保存到string
使用中StringBuilder
为什么这不起作用?
string result = new StringBuilder("").Append(".-",0,40).ToString();
Run Code Online (Sandbox Code Playgroud)
我知道其他解决方案,但我想使用StringBuilder