使用LINQ/extensions方法重复字符串

lun*_*dir 4 c#-4.0

只是我正在调查的好奇心.

问题:简单地重复(倍增,有人会说)字符串/字符n次.
我知道有这个目的的Enumerable.Repeat,但我试图在没有它的情况下做到这一点. LINQ在这种情况下,似乎没什么用处,因为在查询

from X in "s" select X  
Run Code Online (Sandbox Code Playgroud)

字符串 "S"正在探索等X是一个字符.同样是扩展方法,因为例如"S".Aggregate(blablabla)将再次处理角色'',而不是字符串本身.为了重复字符串,需要一些"外部",所以我认为lambdasdelegates,但是如果没有声明一个变量来赋予委托/ 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做一些事情,或者将它投射到其他一些系列,我不知道.反思也被接受了.

Tim*_*ter 7

要重复一个字符n次,你不会用Enumerable.Repeat,但只是这个字符串构造函数:

string str = new string('X', 10);
Run Code Online (Sandbox Code Playgroud)

要重复一个字符串我不知道比使用string.Join和更好Enumerable.Repeat

string foo = "Foo";
string str = string.Join("", Enumerable.Repeat(foo, 10));
Run Code Online (Sandbox Code Playgroud)

编辑:string.Concat如果您不需要分隔符,则可以使用:

string str = string.Concat( Enumerable.Repeat(foo, 10) );
Run Code Online (Sandbox Code Playgroud)


Ahm*_*eed 2

如果您尝试重复字符串而不是字符,一种简单的方法是使用方法StringBuilder.Insert该方法采用插入索引和要使用的重复次数的计数:

var sb = new StringBuilder();
sb.Insert(0, "hi!", 5);
Console.WriteLine(sb.ToString());
Run Code Online (Sandbox Code Playgroud)

否则,要重复单个字符,请使用字符串构造函数,正如我在此处类似问题的评论中提到的那样。例如:

string result = new String('-', 5); // -----
Run Code Online (Sandbox Code Playgroud)

为了完整起见,值得注意的是,它StringBuilder提供了一个可以重复字符的重载Append方法,但对于字符串没有这样的重载(这就是该Insert方法的用武之地)。我更喜欢字符串构造函数而不是StringBuilderif 这就是我感兴趣的事情。但是,如果我已经在使用 a StringBuilder,那么使用该Append方法从某些链接中受益可能是有意义的。这是一个人为的示例来演示:

var sb = new StringBuilder("This item is ");
sb.Insert(sb.Length, "very ", 2) // insert at the end to append
  .Append('*', 3)
  .Append("special")
  .Append('*', 3);
Console.WriteLine(sb.ToString()); // This item is very very ***special***
Run Code Online (Sandbox Code Playgroud)