方法string.Replace()不起作用

public string Generate() { RandomNumberGenerator rdng = new RNGCryptoServiceProvider(); byte[] bytes = new byte[40]; rdng.GetBytes(bytes); string a = Convert.ToBase64String(bytes); a.Replace("=", "r"); a.Replace("+", "t"); return a; } a=43TvtRvrTrt54g5gtbrTTBR45iu+zqbB03gXej== ; 

a.Replace()之后:

 a=43TvtRvrTrt54g5gtbrTTBR45iu+zqbB03gXej== ; 

我想在我的C#项目中生成独特的价值。 一切都很棒。 但是当我想调用string.Replace() ,它不起作用。 此方法之前和之后的值相同。 为什么?

replace方法返回一个新的字符串对象,它不会修改现有的字符串。 以下陈述应该有效:

 a = a.Replace("=", "r"); 

有用。 它只是没有你想的那样:它不会编辑现有的 string :它会创建一个新的字符串。 尝试:

  a = a.Replace("=", "r"); a = a.Replace("+", "t"); 

这是因为string不可变的 :它们一旦创建就不会改变(至少,如果你看起来不是这样 – 有一些例外,比如StringBuilder的内部,但那些是你不应该看到的实现细节)

问题是该方法不会更改您调用方法的字符串,但会返回另一个字符串,因此您应该将其分配给另一个对象,以便更改保持不变,因为字符串是一个不可变的对象:

 a=a.Replace("=", "r"); a=a.Replace("+", "t"); 

String.Replace不是修改a,而是返回一个新的String。 由于这使其可链接,解决方案可能如下所示:

 a = a.Replace("=", "r").Replace("+", "t");