相当于 += 的前缀操作符是什么?

6

是否有一种类似于使用+=将内容追加到字符串末尾的语法糖,可以将数据前缀添加到字符串开头?


2
你不能只是反转参数并调用+=吗?我不熟悉C#,但在Java中这样做可以。 - I82Much
1
这会将第一个字符串附加到第二个字符串后面,而不是在第二个字符串前缀中添加第一个字符串。结果将是相同的字符串,但在错误的变量中。 - Charles Bretana
@l82Much:你肯定需要做类似这样的事情:s = "Prepend" += s; - Lazarus
5个回答

20

只需使用:

x = "prefix" + x;

没有复合赋值运算符可以实现这个功能。


谢谢Jon(Tony),我也考虑了您下面的评论。 - Jamie Dixon

17
sorry = "nope, " + sorry;

7

你可以编写一个扩展方法:

public static class StringExtensions{

    public static string Prefix(this string str, string prefix){
        return prefix + str;
    }

}

var newString = "Bean".Prefix("Mr. ");

这并不是语法糖,但仍然很简单。虽然它并不比已经提出的建议更简单。


7

C# 中没有 =+ 运算符,但是面向对象编程在这里挺有用的:

string value = "Jamie";
value = value.Insert(0, "Hi ");

关于string.Insert的更多信息,请参见:http://msdn.microsoft.com/en-us/library/system.string.insert.aspx

我同意a = b + a似乎是最明智的答案。这比使用string.Insert要好得多。


谢谢,尼克。最终我决定使用String.Concat方法。 - Jamie Dixon

0

这些是来自 FCL 的方法,可以用于合并字符串,而无需使用任何连接运算符。+ 和 += 运算符在重复调用时(即循环)容易使用大量内存,因为字符串和临时字符串的创建方式。 (编辑:正如评论中指出的那样,String.Format 通常也不是一个有效的解决方案)

它更像是一种语法替代而不是糖果。

string full = String.Format("{0}{1}{2}", "prefix", "main string", "last string");

更多信息请参考MSDN上的String.Format

编辑:仅针对两个字符串:

string result = string.Concat("prefix", "last part");

^ 更多关于String.Concat的信息。


重复使用String.Format也会带来问题。使用String.Concat比使用String.Format更有效,只是用于连接字符串。在循环中进行连接操作时,最好使用StringBuilder而不是String.Format。 - Jon Skeet
1
使用String.Format这种方式非常低效。CPU使用率更高,而且仍然浪费RAM。你应该使用String.Concat:string full = String.Concat("前缀", "主字符串", "最后字符串")。你还可以传递一个在循环中构建的string[]给String.Concat(例如,你可以构建一个List<string>,然后ToArray())。这是所有方法中内存使用最少的,因为它只分配了存储结果字符串所需的空间。"+"和String.Format平均分配的RAM比所需的多约30%。这仅在处理大字符串时才很重要。 - Ray Burns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接