当前位置:  开发笔记 > 编程语言 > 正文

我可以"乘"一个字符串(在C#中)吗?

如何解决《我可以"乘"一个字符串(在C#中)吗?》经验,为你挑选了8个好方法。

假设我有一个字符串,例如,

string snip =  "";

我想基本上写多次,取决于一些整数值.

string snip =  "";
int multiplier = 2;

// TODO: magic code to do this 
// snip * multiplier = "";

编辑:我知道我可以轻松编写自己的函数来实现这一点,我只是想知道是否有一些我不知道的奇怪的字符串运算符



1> Will Dean..:

在.NET 4中,您可以这样做:

String.Concat(Enumerable.Repeat("Hello", 4))


并且在.NET 3.5中没有更多:String.Concat(Enumerable.Repeat("Hello",4).ToArray())
@dementedhedgehog我知道你承认你自己的老年痴呆症,但即使你痛苦,你也许可以看到一个Python的例子不会对C#问题做出很好的答案......我想我们大多数人都能看到语言选择始终是一种妥协,几乎任何问题的答案都可以通过宣传来支持,无论是赞成还是反对.
我觉得它根本不优雅.在python中,执行此操作的代码是:snip*multiplier(它并不可怕......但它也不是很漂亮).

2> James Curran..:

请注意,如果您的"字符串"只是一个字符,则会有一个字符串构造函数的重载来处理它:

int multipler = 10;
string TenAs = new string ('A', multipler);



3> Tamas Czineg..:

不幸的是/幸运的是,字符串类是密封的,所以你不能从它继承并重载*运算符.您可以创建扩展方法:

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 = "".Multiply(10);


就在我要去的地方!您可以使用StringBuilder ctor中的source.Length*multiplier进行优化
Marc的评论就在*我*去的地方:)

4> LukeH..:

我和DrJokepu在这个上面,但如果由于某种原因你确实想要使用内置功能作弊,那么你可以这样做:

string snip = "";
int multiplier = 2;

string result = string.Join(snip, new string[multiplier + 1]);

或者,如果您使用的是.NET 4:

string result = string.Concat(Enumerable.Repeat(snip, multiplier));

我个人不会打扰 - 自定义扩展方法更好.



5> user51710..:

只是为了完整性 - 这是另一种方法:

public static string Repeat(this string s, int count)
{
    var _s = new System.Text.StringBuilder().Insert(0, s, count).ToString();
    return _s;
}

我想我前一段时间从Stack Overflow中删除了那个,所以这不是我的想法.



6> Marc Gravell..:

你必须编写一个方法 - 当然,使用C#3.0它可能是一个扩展方法:

public static string Repeat(this string, int count) {
    /* StringBuilder etc */ }

然后:

string bar = "abc";
string foo = bar.Repeat(2);



7> digEmAll..:

有点晚了(只是为了好玩),如果你真的想使用*运算符来完成这项工作,你可以这样做:

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
    }
}

所以:

var newStr = new StringWrap("TO_REPEAT") * 5;

需要注意的是,只要你能找到一个合理的行为,对他们来说,也可以通过处理其他运营商StringWrap类,如\,^,%等...

PS:

Multiply()@DrJokepu的延伸信用保留所有权利;-)



8> 小智..:

这更简洁:

new StringBuilder().Insert(0, "", count).ToString()

using System.Text;在这种情况下应该导入名称空间.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有