ins*_*ite 126 c# string extension-methods
假设我有一个字符串,例如,
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)
编辑:我知道我可以轻松编写自己的函数来实现这一点,我只是想知道是否有一些我不知道的奇怪的字符串运算符
Wil*_*ean 216
在.NET 4中,您可以这样做:
String.Concat(Enumerable.Repeat("Hello", 4))
Run Code Online (Sandbox Code Playgroud)
Jam*_*ran 91
请注意,如果您的"字符串"只是一个字符,则会有一个字符串构造函数的重载来处理它:
int multipler = 10;
string TenAs = new string ('A', multipler);
Run Code Online (Sandbox Code Playgroud)
Tam*_*ege 60
不幸的是/幸运的是,字符串类是密封的,所以你不能从它继承并重载*运算符.您可以创建扩展方法:
public static string Multiply(this string source, int multiplier)
{
StringBuilder sb = new StringBuilder(multiplier * source.Length);
for (int i = 0; i < multiplier; i++)
{
sb.Append(source);
}
return sb.ToString();
}
string s = "</li></ul>".Multiply(10);
Run Code Online (Sandbox Code Playgroud)
Luk*_*keH 11
我和DrJokepu在这个上面,但如果由于某种原因你确实想要使用内置功能作弊,那么你可以这样做:
string snip = "</li></ul>";
int multiplier = 2;
string result = string.Join(snip, new string[multiplier + 1]);
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是.NET 4:
string result = string.Concat(Enumerable.Repeat(snip, multiplier));
Run Code Online (Sandbox Code Playgroud)
我个人不会打扰 - 自定义扩展方法更好.
use*_*710 10
只是为了完整性 - 这是另一种方法:
public static string Repeat(this string s, int count)
{
var _s = new System.Text.StringBuilder().Insert(0, s, count).ToString();
return _s;
}
Run Code Online (Sandbox Code Playgroud)
我想我前一段时间从Stack Overflow中删除了那个,所以这不是我的想法.
你必须编写一个方法 - 当然,使用C#3.0它可能是一个扩展方法:
public static string Repeat(this string, int count) {
/* StringBuilder etc */ }
Run Code Online (Sandbox Code Playgroud)
然后:
string bar = "abc";
string foo = bar.Repeat(2);
Run Code Online (Sandbox Code Playgroud)
有点晚了(只是为了好玩),如果你真的想使用*
运算符来完成这项工作,你可以这样做:
public class StringWrap
{
private string value;
public StringWrap(string v)
{
this.value = v;
}
public static string operator *(StringWrap s, int n)
{
return s.value.Multiply(n); // DrJokepu extension
}
}
Run Code Online (Sandbox Code Playgroud)
所以:
var newStr = new StringWrap("TO_REPEAT") * 5;
Run Code Online (Sandbox Code Playgroud)
需要注意的是,只要你能找到一个合理的行为,对他们来说,也可以通过处理其他运营商StringWrap
类,如\
,^
,%
等...
PS:
Multiply()
@DrJokepu的延伸信用保留所有权利;-)
小智 6
这更简洁:
new StringBuilder().Insert(0, "</li></ul>", count).ToString()
Run Code Online (Sandbox Code Playgroud)
using System.Text;
在这种情况下应该导入名称空间.