只是我正在调查的好奇心。
问题:简单地重复(乘以,有人会说)字符串/字符 n 次。
我知道这个目标有 Enumerable.Repeat ,但我试图在没有它的情况下这样做。
在这种情况下, LINQ 似乎没用,因为在查询之类
from X in "s" select X
正在探索字符串“s”,因此X是字符。 扩展方法也是如此,因为例如“s”。聚合(blablabla)将再次处理字符'',而不是字符串本身。为了重复字符串,需要一些“外部”,所以我想 lambdas 和委托,但如果没有声明一个变量来分配委托/ lambda就无法完成表达到 就像定义一个函数并将其调用内联一样:
( (a)=>{return " "+a;} )("a");
或
delegate(string a){return " "+a}(" ");
会出现“无名称”错误(因此无递归,AFAIK,即使将可能的lambda / delegate作为参数传递),最后也是如此由于其局限性,甚至无法由C#创建
可能是我从错误的角度看这件事。任何想法?
这只是一个实验,我不关心表演,关于记忆的使用......只是它是一线而且是一种自主的。也许我可以用Copy / CopyTo做一些事情,或者将它投射到其他一些系列,我不知道。 反思也被接受。
答案 0 :(得分:6)
要重复一次字符n次,你不会使用Enumerable.Repeat
而只是this string constructor:
string str = new string('X', 10);
重复一个字符串我不知道比使用string.Join
和Enumerable.Repeat
更好的事情
string foo = "Foo";
string str = string.Join("", Enumerable.Repeat(foo, 10));
编辑:如果您不需要分隔符,则可以使用string.Concat
:
string str = string.Concat( Enumerable.Repeat(foo, 10) );
答案 1 :(得分:2)
如果你试图重复一个字符串,而不是一个字符,一个简单的方法是使用StringBuilder.Insert
method,它需要一个插入索引和一个重复次数的计数:
var sb = new StringBuilder();
sb.Insert(0, "hi!", 5);
Console.WriteLine(sb.ToString());
否则,要重复单个字符,请使用我在similar question here的注释中提到的字符串构造函数。例如:
string result = new String('-', 5); // -----
为了完整起见,值得注意的是StringBuilder
提供了一个overloaded Append
method可以重复一个字符,但字符串没有这样的重载(这是Insert
方法来的地方在)。我更喜欢字符串构造函数到StringBuilder
,如果这是我感兴趣的话。但是,如果我已经使用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***