2012-12-13 32 views
3

只是我正在调查的好奇心。用LINQ/extensions方法重复字符串

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

from X in "s" select X 

“S”正在探索等X是焦炭。因为例如“s”,所以扩展方法也是如此。 集合(blablabla)将再次处理字符's',而不是字符串本身。为了重复字符串,需要“外部”的东西,所以我认为lambdas代表,但它不能没有声明一个变量来分配委托/ lambda表达式。
因此,像定义一个函数,把它内联:

((a)=>{return " "+a;})("a"); 

delegate(string a){return " "+a}(" "); 

会给一个“没有名字”的错误(等没有递归,据我所知,即使通过传递可能的lambda /委托作为参数),并且最终甚至不能由C#创建,因为它的局限性。
这可能是我从错误的角度看待这件事。有任何想法吗?
这只是一个实验,我不关心表演,关于记忆的使用...只是它是一条线和某种自主的。也许我们可以用Copy/CopyTo来做些什么,或者把它转换成其他的集合,我不知道。 反射也被接受。

+0

差不多;我想避免enumerable.repeat – lunadir

+0

您是否阅读过该文章的答案?它使用字符串构造函数,而不是'Enumerable.Repeat'。 –

+0

它重复一个字符,好的,但一个字符串 – lunadir

回答

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*** 
+0

stringbuilder,明白了 – lunadir

6

要重复一个字符n次,你不会用Enumerable.Repeat只是this string constructor

string str = new string('X', 10); 

要重复一个字符串,我不知道还有比使用string.JoinEnumerable.Repeat

string foo = "Foo"; 
string str = string.Join("", Enumerable.Repeat(foo, 10)); 

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

string str = string.Concat(Enumerable.Repeat(foo, 10)); 
+0

我没有看到,很有用;你知道重复一个字符串的东西,甚至? – lunadir

+0

@lunadir:编辑我的答案。 –