C# 如何知道String.Replace或StringBuilder.Replace是否会修改字符串?

C# 如何知道String.Replace或StringBuilder.Replace是否会修改字符串?,c#,string,C#,String,我想知道是否需要对字符串执行String.Replace/StringBuilder.Replace 所以我有两种方法 第一种方式: var myString = new StringBuilder("abcd"); var copyMyString = myString; myString = myString.Replace("a", "b"); if (!myString.Equals(copyMyString))//If the string Is changed { //My

我想知道是否需要对字符串执行String.Replace/StringBuilder.Replace

所以我有两种方法

第一种方式:

var myString = new StringBuilder("abcd");
var copyMyString = myString;

myString = myString.Replace("a", "b");
if (!myString.Equals(copyMyString))//If the string Is changed
{
    //My Code
}
第二点:

var pos = myString.ToString().IndexOf("a");
if (pos > 0)
{
    myString = myString.Replace("a", "b");
    //After this line the string is replaced.
    //My Code
 }
执行此性能的更快方法是什么

还有别的办法吗

字符串长度有时可能为1MB或更大。

这取决于pos>0的频率。注意,pos>=0可能是真的。将循环遍历每个字符,直到找到您要查找的内容,所以它处于启用状态。这是一个非常便宜的操作,因为它只是一次搜索

这里的成本很高。对于经常在下面修改它们的字符串,可以覆盖字符串,字符串越大,成本就越高。这也可以有多个替换,因为它会查找所有出现的情况


因此,除非pos>=0几乎总是正确的,否则第二种情况将更有效,但您应该放弃.ToString,因为它不起任何作用。

您可以通过如下修改第二种方法来加快速度:

var pos = myString.ToString().IndexOf("a");
if (pos > 0)
{
    myString = myString.Replace("a", "b", pos, myString.Length - pos);
    //After this line the string is replaced.
    //My Code
 }
我们现在打电话


现在,它不需要再次搜索字符串的第一部分。这不太可能节省很多时间,但会节省一些时间。

第一个可能需要一些时间,因为您的程序将遍历字符串以修改字母,然后遍历两个字符串以比较它们。第二种方法速度更快,但问题是它不起作用。如果您的初始字符串包含某个字符,并且在执行代码之前未验证重放是否有效,请执行代码。显然,第二个字符串更短、更干净。您正在比较苹果和桔子。第一个变量永远不会为false,因为两个变量引用相同的变量StringBuilder@E-Bat更短、更干净的代码并不总是意味着更快或更好的性能。